Sixty Second Binary Option a Scam? Forex Free Strategy ...

The Shoulders of Orion- Ch. 1: First Contact

Space-time rippled as the Horns of Glory snapped into real space. The normally smooth transition from FTL subspace travel back to the laws of relativity was instead dangerously jarring, as the inertial dampeners struggled to hold the innards of the massive warship in their proper places. After straining mightily for the briefest of moments, they failed, throwing Admiral Halon Va and the rest of his bridge crew violently into their restraining harnesses. The ship shuddered under the immense stress, then settled, drifting silently through space on minimal power.
“Tactical, get me a status report for the fleet on screen now. I want updates the instant ships jump in.” The Admiral’s voice was still firm and authoritative; it was taking every last shred of resolve he had to keep it that way. “Lieutenant Roshin, put a detail together and work with medical. I’m sure that re-entry caused more than a few extra injuries. Get as many of the crew patched up and ready for emergency action as fast as you can. I want a full casualty report as soon as possible. And if you find Science Officer Lentith and he’s still alive, send him to the bridge immediately.”
Admiral Va settled back into his command chair, drawing creaking sounds from the over-stressed frame as it absorbed the weight of his massive form. The bridge was completely silent now, the command crew entirely focused on the tasks at hand. Or they were too afraid to say anything; Va couldn’t be sure. He was thankful for their silence, though. He didn’t have any answers for them about his failure.
Keying in a few commands on the command panel at his station, the damage report for his ship popped up, the bridge lights flickering from the extra power draw. The Horns of Glory floated before him in hologram form. Long and slender, the ship was over two kilometers from bow to stern. At least, it had been a few hours ago. The forward 20 percent of the holographic ship was flashing red, indicating heavy damage. This was inaccurate, however, as the forward 20 percent of the ship simply wasn’t there anymore. The graceful lines and carefully crafted angles of the ship's armor were an unrecognizable slagged mess, and deep gouges had been cut into the inner decks all over the ship. Whole sections were missing amidships, two of the main reactors were offline, all the primary weapon batteries had been completely destroyed, and most of the critical systems were barely functioning. It was a miracle that she had survived the jump. That morning, Horns of Glory had been the greatest feat of Arien’Ra engineering, and it was now a barely functioning hulk.
And it had all happened under my command, thought Va.
He had no time to wallow in his failures, however, as at that moment tactical finally reconnected to the fleet command systems. The hologram of Horns of Glory quickly scaled down, appearing as a small, flashing, red point of light floating in loose formation with several other points of light. Most of them were flashing red as well. A constant stream of data and various reports scrolled down the right side of the hologram, listing in no uncertain terms the doom that Va had subjected his command to.
If Va had thought that the bridge was quiet before, it was nothing compared to the complete stillness that now settled over them. No one so much as moved a muscle, as they all sat in stunned silence, reading the reports. Occasionally, the hologram would flash, and a new point of light would join the formation, adding more data to the pile spelling out their damnation. After 30 ticks, new points of light had stopped appearing. Admiral Halon Va had lost over 60 percent of his fleet, and not a single other dreadnaught had survived the slaughter. His defeat was total, and the Federation navy was crippled.




Science Officer Beredarin Lentith had been the first member of his family not to enroll in command school in eight generations. They had been some of the finest members of the fleet the Vorqual race had ever contributed to the Federation. His brothers and sisters had all enrolled, which meant that as far as he was concerned, his family had more than fulfilled their duty to the Federation. Military life wasn’t for him, anyway; he wanted to explore. The Federation had been around for over 3000 years, and there were still vast swathes of the galaxy that they knew nothing about. They were still encountering new species every few hundred or so years, and there was nothing he wouldn’t give to find the next one. That had been the dream that directed him away from the military and into academia. The odds of actually finding a new race were so small, though. There were still at least 200,000,000 unexplored systems in the galaxy. There just wasn’t time to visit them all...
He snapped out of his reverie as he stepped over the body, or rather, what was left of the body, of a Zelnassi marine. Most of it was just a green stain on the corridor wall at this point, though there had been enough of the chitinous armored torso to partially obstruct his path. The young lieutenant quickly continued on towards the bridge.
If he was being honest with himself, becoming an expert on the area of unexplored space directly between the Federation and it’s largest military rival wasn’t the smartest of ideas. Between his family reputation and his unique knowledge base, he was just asking to get pressed into service.
Which was exactly what had happened immediately upon the recent outbreak of hostilities.
And now here he was stepping over corpses, marveling at the fact that he had somehow survived this long. He still couldn’t believe the insanity of the Dominion forces. Boarding an enemy ship MID-COMBAT. It was like something out of a youngling’s tale from before space travel. It was pure madness, but there were the bodies to prove that it had happened. He gingerly stepped around the remains of yet another Zelnassi.
The signs of battle continued all the way to the bridge, where he found security forces still holding quickly fortified positions around the bridge entrance. There were more Zelnassi bodies at their feet. Berendarin shuddered. He had been closer to death than he thought.
He quickly pushed those thoughts out of his mind. He could only imagine why he was needed on the bridge so urgently.
The door slid open, and Lentith walked into a completely silent room. Admiral Va was slouched at his command station, his enormous arm propped up on the chair arm and supporting his massive, horned head. Lentith didn’t even know that Arien’Ra COULD slouch. Nevermind that the fastidious Admiral could or would ever do such a thing. Maybe things were somehow worse than he thought. No one seemed to notice him enter, so he announced himself to the Admiral.
Though he didn’t shout, his voice echoed in the deathly silent room, startling most of the bridge command. Two of the other Vorqual officers swore, and the tiny Jezren manning the com station let out a high pitched sound somewhere between a squeak and chirp. Berendarin would have found it quite funny if the situation wasn’t so dire.
Admiral Va immediately snapped back to being the hulk of muscle and horn that imposed his will on a room just by being in it. His booming voice only added to his authority.
“Science Officer Lentith. I’m glad to see you’re still alive. Are you seriously injured?”
Berendarin had almost forgotten that he had walked the entire way to the bridge holding a bandage to his head just above his left eye. The drop out of subspace hadn’t been kind to him. He pulled the bandage away, revealing a dark orange stain on the bandage and a crack in the bone plate above his eye.
“I’m fine, sir, just one of the outer plates, and the bleeding has already stopped.”
“Good. Commander Vortith is currently overseeing the emergency repairs. Take his seat. You are going to help me find a way back home.”
“Sir? I’m sorry I don’t understand. Why don’t we just go back the way we came?”
“That’s not possible. Most of our supply ships and tenders were destroyed when that third wave of Dominion ships hit our flank. Almost all of our pre-prepared fuel reserves are gone. On top of that, some of our ships are so damaged that they don’t have another long jump in them. And if we run into any enemy ships, the whole rest of the fleet is done for. We barely qualify as a fighting force in the state we’re in.”
“Is it really that bad?”
“It’s worse, but we don’t have time to get into the details. You’re the expert on this section of the galaxy. I need you to find the fleet a hiding hole. Somewhere away from the known jump routes through the Spur. Any system where we can use the few miners we have left to scavenge up some fuel, and get some critical repairs done while we’re at it. And from there either wait for reinforcements or get ourselves patched up enough to limp home. Wherever it is, it needs to be close. I’m not leaving any ships behind because they can’t make the jump.”
“Oh. Just that?” The lieutenant knew that Arien’Ra were strict herbivores, but with the look that the Admiral shot him, he couldn’t help but think about the fact that his head would easily fit into that giant, molar filled mouth.
“And away from any known pirate hideaways. Like I said, our fleet can’t take any more fighting. And find it quickly. It won’t be long before the Dominion fleet locates us.”
“I. Uh. Sure. I’ll see what I can find.”
Berendarin shrank into the commander’s chair next to the enormous Arien’Ra, desperately wishing he had been more professional. If he had acted like a proper soldier, it might soften the blow of telling the Admiral that what he wanted was next to impossible. If he had a few weeks, he might be able to find something. So much of the Spur was still un-surveyed. The odds of there being anything useful to the Admiral in the databases was absurdly low, and there was even less of a chance he’d be able to find it in time for the information to matter. He began pouring through his notes anyway. It was better than waiting around to die, which, if the situation was as dire as the Admiral made it sound, was the only other option.
He spent the next hour lost in his notes, finding nothing, while the bridge crew went about piecing the ship and the fleet back together. The young scientist had all but given up on the Admiral’s impossible request when a raucous cheer went up from everyone on the command deck.
“Sir,” The coms officer called out, “The Consul’s Pride just dropped out of subspace and is hailing us, sir.
The main communication screen lit up, and Berendarin Lentith looked to see the face of his oldest sister on screen, strapped into the captain’s chair of her dreadnaught. He let out a sigh of relief; Baraquen was his favorite sibling. Her uniform was drenched in a deep orange blood stain at the shoulder, and she was covered in what looked like flecks of green gore from a Xelnassi. The artificial gravity was clearly malfunctioning, as the captain’s restraining harness was the only thing keeping her from floating around her bridge. But the bone plates of her jaw were turned as always into her calm, self assured smile
“My apologies for the delay in joining you, Admiral Va. We had some… guests shut down our drive mid jump. We had to deal with them before we rejoined the fleet. I assume there is a plan to get us back to federation space?”
“It’s good to see you in one piece, Captain Lentith,” the Admiral responded. He was barely able to keep the relief from his voice. “And there is indeed a plan.”
Berendarin returned to his research as the two ranking officers in the fleet went over the details of their current predicament. He was glad his sister had survived, and not just because they were close. It would have been a terrible blow to the whole family to have lost not only their future matriarch, but the ship she commanded as well. A member of his family had been commanding that dreadnaught uninterrupted for the last 5 generations. Military service had never appealed to Berendarin, but his family history was certainly still important.
And then the solution to the current problem hit him like a driver round. He let out a gasp and tore into his notes with a fervor. Both Admiral Va and his sister’s projection turned to look at him, but he didn’t notice. After a few seconds of curious silence from the rest of the onlookers, Berendarin practically jumped out of his seat.
“Admiral, I think I’ve got something that will work.” The young Lieutenant punched a few commands into his datapad, and a set of stellar coordinates popped up on the navigation terminal. “It’s a main sequence star, about 500 light years from us, fairly close to the edge of the Spur. It’s not anywhere near any established jump routes. The Consul’s Pride made me think of it.” He nodded towards his sister’s face on the ship's screen. “Our great, great grandsire took the Consul’s Pride through the system on her shakedown run a little over 300 cycles ago. Chased a band of Qorthi slavers out of the system. The outer four planets are all gas giants. If we can’t find Helium 3 there, I don’t know where else we should look.”
On screen, Captain Lentith looked impressed, but Admiral Va clearly didn’t seem too sure. “We’re supposed to be going away from Dominion forces, not into them. What were the Qorthi doing there?”
“There are also four rocky inner worlds in the system, Sir, according to reports from the encounter. Apparently, the third planet is a Class 7 Deathworld, and the Qorthi were running some experiments on the primitive lifeforms there. They were caught completely by surprise by the Consul’s Pride, and it was the first time that she fired her weapons in anger. I can’t find any reports of Dominion ships in that section of the Spur since.” There was a long pause before Va responded.
“Good work, Lieutenant. I knew my trust in you wasn’t misplaced.” Admiral Va replied, before turning to the rest of the bridge and booming “Coms! Tactical! Get those coordinates to every ship in the fleet. I want every ship we have left formed up and ready to jump as soon as possible. Any captain who feels that his drives can’t make the jump is to focus all repair efforts on getting their drives functioning immediately. I will transfer repair crews from less damaged ships to more damaged ships if that means we jump even a tick earlier. Get to it everyone. I’m not losing any more of my fleet today.”




The four revolution long jump to Science Officer Lentith’s newfound sanctuary had done wonders for Halon Va’s mental state. The initial shock of his fleet's terrible defeat had worn off, and he had been able to focus on what came next. Repair crews were able to stabilize most of his ship's core systems, and he was no longer worried about the life support systems cutting out and killing the rest of his crew. There had also been time for him to visit with the wounded. To thank them for their sacrifices. He had expected it to be an act of contrition, maybe even a chance to start begging for forgiveness. But there had been no anger in his crew, and no blame hung on his horns. Most had just been relieved that he had survived, and had expressed as much. He would be forever grateful to them for that.
Most importantly, the four revolutions in hyperspace had given the admiral time to really think about what had gone wrong in the nebula. He had barely rested in the preceding four revolutions, spending every scrap of spare time in his office, pouring over records from the battle. That’s where he found himself now, tucked behind his massive ceramic and titanium alloy desk of Tellarim design. It had been custom made for him upon his promotion to this command, a gift from the high admirals and the council. It was the only luxury that Va allowed in his office. The rest of Va’s space he kept strictly utilitarian. There were no trophies adorning his walls, as was customary for other members of his species. The plain bulkheads of his office were instead lined entirely with screens, and each of them were now filled with footage and reports from the battle, running on loop.
Va soaked it all in. The more he watched, the more a singular conclusion crystallized in his mind. He had done everything right; he was sure of that now. 1000 years of doctrine and theory for fighting the Dominion had gone into his preparation for that battle, and he had followed it to the letter. And he had been winning. Then that attack on his flank by the Zelnassi had blown all of that out of the airlock. Something significant had changed in the way the Dominion fought...
Commander Vortith’s voice rang out over the com system. ”Admiral Va, we’ll be transitioning back to real space in moments.”
“Thank you. I’ll be there shortly. And get Science Officer Lentith to the bridge. I want him nearby just in case. He’s the only one who has any idea of where we are.” The Admiral pulled himself from his desk. He would have to leave the rest of his analysis for later. There was just enough time for him to reach the bridge and settle into his command chair before the Horns of Glory snapped back to real space. This time, the inertial dampeners held.
“Tactical, status report.”
“All ships accounted for, Admiral. Though the Consul’s Pride, several cruisers, and three of our escorts are all reporting massive failures in their Drive Cores. They won’t be jumping anywhere anytime soon.”
“Wonderful.” Va wasn’t sure if he meant that sarcastically or not. “Get scans up and running and deploy the pickets that aren’t crippled in a standard scouting formation. How close are we to the nearest gas giant?”
“We’re approximately half a light tick from the system’s innermost gas giant, sir.”
“Excellent. Deploy the rest of the fleet. Put us in a high orbit around the planet in a defensive formation, and get our miners working immediately. Once our orbit is stable, I want every hand, paw and hoof in the fleet working on repairs.”
“Yes sir.”
Admiral Va settled into his command chair for a long shift.
It would be a drawn out, boring process to refuel the ships. With his fleet limping along, and only two functioning miners, it would take far longer than it should. After all the chaos of the last few revolutions, boring would be a welcome change of pace. Va started to relax, sinking into his chair’s acceleration padding. His fleet and his crews were finally safe. The first priority would be to get one of the subspace beacons repaired and to get word back to the Federation that the fleet still existed. And hopefully call for aid. He was sure to be stripped of his rank as soon as contact was made, but hopefully he would avoid a Tribunal. That was an unpleasant prospect…
“Sir, we have unidentified ship signatures appearing from around the planet we’re approaching.”
Va had never heard panic in the voice of his young sensors officer before, but it was certainly there now. Va understood the sentiment, though. He found it difficult to keep the panic from his own voice as he started issuing orders
“Bring the fleet up to combat status immediately. How many ships are there?”
“I’m showing 35 individual signatures. All approaching us at combat speed and still accelerating. At current speeds, they will intercept us in just over 30 ticks, sir.”
“I want details as soon as you have them, Lieutenant. Size, make, estimated firepower. Who they are. And keep scanning the system. Find out where they came from.” The panic had partially subsided for Va. 35 unknowns was not too terrible a threat. He still had almost 240 warships under his command. Still, if there was a way to avoid combat, he had to try. His fleet couldn’t suffer any more losses. “Coms, any attempt by these unknown ships to contact us?”
“I”m not sure, sir,” the diminutive Jezren at the coms replied. “There’s nothing on standard communications channels. The ships are transmitting something, but I can’t figure out what it is.”
“Admiral,” the Lieutenant at the sensors station called out. “I think I might have an idea of where these ships came from. Preliminary scans show there is extensive urbanization on the third and fourth planets, as well as what appear to be habitation sized artificial satellites around the second and sixth planets. One of the moons of the gas giant we’re approaching shows signs of habitation as well. All of them are emitting significant signal pollution. This system clearly already belongs to someone, and they’re broadcasting everywhere.”
Halon Va, High Admiral of the Combined Federation Fleets, turned, slowly and with as much composure as he could muster, to face the young science officer seated to his left. Berendarin sat, mouth agape, staring transfixed at the sensor readouts in front of him. Va had never seen a Vorqual more confused in his life. “I want answers, Officer Lentith.”
“I… I don’t.. This doesn’t make any sense,” the young science officer stammered. “There shouldn’t be anything here.”
“Admiral,” The comms officer cut in, “The signal that we’re picking up from the unknown ships is definitely some kind of communication. I managed to put together audio from it.”
“Play it,” commanded Va. A series of short, guttural, and completely unintelligible sounds came over the speakers in reply. There was a short pause before the sounds repeated themselves again. “Coms, what was that?”
“No idea, sir, but it’s being transmitted on loop. If it is intended as a communication, our translators have no idea what to do with it.”
“Admiral.” The voice came from Va’s left, and was barely audible. Va turned yet again to look at the young science officer. His gaze was locked on the tactical readout, and there something in his eyes that Va couldn’t recognize. A mixture of pure terror and something else. Was it wonder? The young Vorqual’s voice was still barely above a whisper when he continued to address the admiral: “I think we should run the transmission through First Contact Protocols.”




Captain Benjamin Alvarez-León slammed against his restraining harness as the USCS Aurora started it’s decel burn. He had pushed the engines on the outdated cruiser to their limits, and the ship groaned in protest as it started counteracting his rather zealous acceleration orders. He hoped that his mad scramble with his small squadron of outdated ships had been an overreaction. The alternative was something he’d rather not think about.
All Ben had was the reserves; the rest of the fleet was on maneuvers at Sirius. The Admiralty had wanted to test the new, fully modernized fleet’s maneuvering abilities in the gravwell of a binary system. And, in their infinite wisdom, they decided they needed ALL of the new fleet assets, leaving nothing in Sol except for the handful of cruisers and escorts that couldn’t match the capabilities of the modern ships.
A handful of cruisers and escorts that were now hurtling towards more than 200 unknown contacts.
It was the unknown part of all of this that was unnerving Ben. There were no familiar energy signatures. No familiar scan data. No IFF. No signals coming off the contacts of any kind for that matter. Two of the contacts were too big to even be ships. If it wasn’t for the fact that they were moving towards Jupiter in formation, Ben wouldn’t even think they WERE ships.
“So what do you think, Alexi?” Ben asked, turning towards his second in command. “You and the rest of the bridge crew are always making inane bets. Have you whipped up an over-under for what we’re throwing ourselves at yet?”
“Haven’t had time,” came the quick reply from Ben’s right. The short, stocky man from Vladivostok was missing his trademark joviality. “Though, my money is on them being Ithacan, sir.”
Ben bristled at Alexi calling him sir. They’d been friends for twenty years, damnit, and had been practically joined at the hip since going through the Academy together. Outranking him still felt a little off. Now was hardly the time to worry about formalities, though.
“What makes you think they're from Ithaca?”
“It’s the only thing that makes sense. The locals have been getting increasingly radical, and Ithaca is the only sector where reports of piracy have been increasing.”
“Yeah, I could see a rebellion coming from Ithaca,” Ben added slowly, turning over that scenario in his head. “But there’s no way they could swing something of this magnitude. There aren’t even any shipyards in the sector. And even if there were, there’s no way they could keep the construction of over two hundred ships a secret.”
Alexi could only offer him a shrug in response.
It was at that moment that the coms station informed him there was a transmission incoming from the unidentified ships. Ben instructed the ensign to play it, and the bridge was suddenly filled with a stream of grotesque bleating noises and strange grunts, with the occasional recognizable syllable interspersed throughout the transmission. Ben thought he picked out ‘dentify’ from the mess, but he wasn’t sure. There was a long moment of silence on the bridge.
“What the hell was that?”
When no one had any answers for him, Ben tapped his command console and recorded a new message to broadcast.
“This is Captain Alvarez of the USCS Aurora. Unidentified ships, please clarify. Your transmission is badly garbled. We did not receive your identification. You are still trespassing in Commonwealth space and are on an unauthorized course towards Jupiter. Begin decelerating immediately and re-identify yourselves.”
He wouldn’t admit it to the crew, but Ben was profoundly unsettled. Something was deeply, deeply wrong about this whole situation. Not only was he vastly outnumbered by these things, but they were unwilling to communicate properly. He was almost believing this whole thing was some kind of bizarre prank.
“How much longer before we can get a decent visual on these things?
“Any moment now, sir.”
A new transmission arrived just then, and Ben had it played back immediately. This time, instead of almost bovine bleats and grunts, the sounds coming over the speakers were mostly intelligible. Or, they would have been, if any of the syllables were in the right order. It was almost like a toddler was rattling off all of his new favorite sounds, spitting them out in a random order and not knowing how they went together. There were still a few heavy grunts sprinkled in, just for good measure.
Before Ben could process this new joke of a transmission, the contacts finally started slowing. In a matter of moments, the strange wall of contacts was hanging lazily in Jupiter’s orbit, barely moving fast enough to keep their orbit from decaying. They were still in perfect formation.
“Huh. Well, I guess that’s something.”
With nothing to do but sit back and wait as his ship closed the distance, Ben tried to relax and began running over all of the possibilities in his mind of what the new contacts could be. He came up with nothing. Well, nothing feasible, anyway. He took a series of long, calming breaths, trying to clear his mind and focus. This was no time for his imagination to be running wild. But he couldn’t shake the feeling that logic was failing him. Something was off. Something…
“Captain, bringing visual of the unknown contacts up on screen now.”
Ben actually felt his jaw drop. Every contact on his display was clearly a ship. Most were long and spindly, wrapped in layers of some kind of highly reflective armor; a fleet of crystalline arrows hanging in the darkness. The two largest contacts, which Ben had just moments ago thought were too big to be ships, were large enough on the screen for him to clearly see details. In addition to their immense size and strange armor, both ships were dotted with what were clearly weapons platforms, though what kind, Ben couldn’t tell.
Noticeably, almost all of the ships on his screen were heavily damaged. Chunks were missing from some ships, and most had deep lines gouged into their hulls. Any form of decorative paint or markings had been burned away. Something had put these ships through absolute hell. But still, the damage could not take away entirely from the elegance of the ship’s designs. They were graceful and sleek, completely different from anything Ben had ever seen before.
It was all so different. So strange. So very, very… Alien.
Despite every effort he had made to avoid the word, it finally forced itself to form inside Ben’s mind, and forced him to acknowledge the reality that legitimate, extra-Solar life was hanging in the darkness in front of him. It forced him to acknowledge the screams he had been suppressing in the back of his mind. The screams of his imagination crying out in glorious triumph over reality. And with those screams came a deluge of accompanying thoughts and emotions.
He was a child again, staring up at the stars above Armstrong and wondering what else, and who else, was out there. He was a teen again, signing his name to the Academy enrollment paperwork, determined to get out there between the stars and see the galaxy himself. He was a young officer again, screaming and pleading with the Admiralty to at least consider a modern First Contact scenario. He was sitting in his command chair now, hurtling towards honest-to-god aliens, all of his dreams made manifest in an instant. He was overwhelmed. He was terrified.
And he had never imagined that he could feel such elation.
It was the young warrant officer at the coms that snapped Ben out of his reverie. “Sir, the contacts are hailing us on all standard channels, requesting a video feed.” She sounded very, very nervous.
Ben immediately stood up, straightening his uniform as best he could. “If they’re anything less than genocidal monsters, I’m going to offer them aid and repairs. As long as they’re peaceful, there’s no reason not to extend them the full hospitality of humanity.”
“Ben,” Alexi asked, clearly choosing his words carefully, “Are you sure that’s the… Wisest course of action? How will the Admiralty respond to Goddamned alien ships docking at Hephaestus?”
“Alexi, in the 250 years the Commonwealth has existed, the First Contact protocols haven’t been updated since the charter was signed. No one has cared. This has been nothing but a fantasy for most people. I am NOT letting this opportunity get away. Every child that has ever looked up at the stars and wondered finally got an answer, and I will not waste this moment. We’re making friends, the Admiralty and the government be damned.”
“You do realize you’re potentially deciding the fate of our entire species on a whim, right?”
“Is there someone else you’d prefer to have making this call?”
Alexi, apparently deciding that there was not, stood up and straightened his uniform, standing next to his friend as he ordered the connection of the video feed. The channel connected, and the human bridge crew found themselves looking at the bridge of a ship crewed by not one, but three alien races.
The largest alien in the center of the screen opened its mouth to speak. This time, instead of bleats and grunts, a choppy, mechanical voice that didn’t sync up to the alien at all proclaimed from the bridge speakers in broken, stuttering English: “I. Am Admiral. Halon. Va. Of the Federation of. Sentient Races. Greetings and. Welcome. To the. Galaxy.”
Ben couldn’t suppress his smile.
“On behalf of the United Solar Commonwealth, and all of Humanity, greetings, and welcome to Sol. Your ships look like they’ve had a bad time on your way here. If there’s any way we could aid with your repairs, we’d be happy to help.”




Slave 782 slammed his right appendage onto the control console hard enough to rupture his outer membrane and smear ichor over the panel. It had been four days since the battle in the nebula, and with the latest round of reports, he finally had to admit that the rest of the Federation fleet had escaped him.
It was a minor frustration, all things considered, but the escape prevented this from being a total victory. Still, he had proven his worth to his owners in this battle, and his experiments with the Zelnassi had paid dividends beyond his wildest imagination. He had earned a command today, and with every success in that command, his ability to bargain for his people's freedom only increased. For what he would be asking, it might take the total defeat of the Federation to earn that kind of leverage. Also frustrating, but not a task that he couldn’t handle. It would be a long war, he was sure, but like his owners, he was patient.
He would earn his freedom, even if it meant reducing the entire Federation to glass.


Author Wiki
Series Wiki
NEXT
submitted by STATICinMOTION to HFY [link] [comments]

The Division 2 - Title Update 10 - Patch Notes

Title Update 10 - Patch Notes

*These are preliminary Patch Notes and changes may still happen until the launch of Title Update 10.
 

New Season – Keener’s Legacy

A new season is almost upon us! Starting on June 23rd, Keener’s Legacy offers 12 weeks of in-game activities and unique rewards. Season 2 brings a new Seasonal Manhunt, new Leagues, a new Global event and new unique rewards, as well as an Apparel Event.
 

New Raid - Operation Iron Horse

The True Sons have taken over a Foundry to develop new weapons and threaten to destroy everything the Division has worked for.
  • New bosses, puzzles and rewards!
  • Level 40 version available on June 30th, followed the next week by the level 30 version.
  • Discovery mode will become available at a later date.
  • Unique Rewards
    • 2 new Exotics
    • 2 new Gear Sets
    • New cosmetic rewards
  • Further details will become available closer to the raid’s release in late June.
 

Balance and Bug Fixes

Title Update 10 is bringing our first large balance pass following the release of Warlords of New York. Beyond the addition of new content, the update focuses on three main aspects mainly game health through bug fixes and balancing, generosity by increasing your chances to receive a high-quality item as loot and increasing overall player power. Scroll down for a full list of bug fixes, balancing changes and gameplay tweaks.
 

Missing Localized Audio

We wanted to inform you about an issue with localized audio that will be present when we launch Title Update 10 and Season 2. While the team was able to work from home to get this update ready, with your help testing the content on the PTS, we unfortunately were not able to record all localized audio content for TU10. With everything going on in the world, our top priority is the well-being of our teams, including our voice actors. Of course, we will start working on recording the missing audio with our partners when it is safe to do so and, in some cases, we were able to get things started already. Adding the localized files to the game as soon as we can in one of our next updates is an absolute priority for the team. This only affects Seasonal content. Operation Iron Horse audio is fully localized.
If you are currently playing with a non-English client, you don’t have to change anything going into Title Update 10. When localized audio is missing you will just hear the English audio instead. Subtitles have been localized and can be activated in the ingame options.
As work continues, we will update you on the progress of the integration here on the forums and on State of the Game.
Thank you and stay safe!
 

New Exotics

SRS Sniper Rifle: Mantis

  • Your scoped view displays additional information about enemies not targeting you
  • Your scoped view highlights enemy weakpoints
  • Headshot and weak point damage against enemies not targeting you amplified by 50%
  • Headshot kills reset the cooldown of the Decoy skill. This bonus will wait until the Decoy goes on cooldown if currently active
 

Mask: Vile

  • Status effects also apply a damage over time debuff for 10s
  • Total damage dealt is equal to 50% of your concussion grenade damage and increased by your status effect attributes
 

Double Barrel Rifle: The Ravenous (Operation Iron Horse)

  • On trigger-pull, fire both barrels at once
  • When fired from the right shoulder, hits add offensive primers, and defensive primers when fired from the left shoulder
  • Hits from one shoulder will detonate all of the opposite shoulder's primers when present
  • When detonated or affected enemy is killed, each offensive primer deals 100% weapon damage, while each defensive primer grants +4% bonus armor and +10% amplified damage to armor plates for 5s
  • Primer effectiveness is doubled at 10 stacks
 

Magnum Pistol: Regulus (Operation Iron Horse)

  • Headshot kills create a 5m explosion, dealing 400% weapon damage and applying bleed to all enemies hit.
  • High accuracy and base damage
 

New Gear Sets

Eclipse Protocol (Season 2)

  • Core: Skill Tier (Yellow)
  • 2: +15% Status Effects
  • 3: +15% Skill Haste and +30% Hazard Protection
  • 4: "Indirect Transmission" Your status effects now spread on kill to all enemies within 15m and refresh 50% of the duration.
  • Chest talent: "Proliferation" Increases Indirect Transmission range from 15m to 20m and refresh percentage from 50% to 75%
  • Backpack talent: "Symptom Aggravator" Amplifies all damage you deal to status affected targets by 15%
 

Foundry Bulwark (Operation Iron Horse)

  • Core: Armor (Blue)
  • 2: +10% Armor
  • 3: +3% Armor Regeneration
  • 4: "Makeshift Repairs" Whenever you or your shield take damage, 20% of that amount is repaired to both over 15s
  • Chest talent: "Process Refinery" Increases Makeshift Repairs from 20% to 30% over 15s
  • Backpack talent: "Improved Materials" Increases Makeshift Repairs speed from 15s to 10s
 

Future Initiative (Operation Iron Horse)

  • Core: Skill Tier (Yellow)
  • 2: +30% Repair Skills
  • 3: +30% Skill Duration and +15% Skill Haste
  • 4: "Ground Control" Increases you and your allies' total weapon and skill damage by 15% when at full armor
  • When you repair an ally, you and all allies within 5m of you are also repaired for 60% of that amount
  • Chest talent: "Tactical Superiority" Increases Ground Control damage bonus from +15% to +25%
  • Backpack talent: "Advanced Combat Tactics" Increases Ground Control proximity repair from 60% to 120%
 

New Gear Brand

Walker, Harris & Co.

  • Core: Weapon Damage (Red)
  • 1: +5.0% Weapon Damage
  • 2: +5.0% Damage to Armor
  • 3: +5.0% Damage to Health
 

New Named Weapons

  • Mechanical Animal (SIG 556) with Future Perfection
    • Weapon kills grant +1 skill tier for 19s. Stacks up to 3 times.
    • Weapon kills at skill tier 6 grant overcharge for 15s.
    • Overcharge Cooldown: 90s
  • Harmony (Resolute MK47) with Perfectly In Sync
    • Hitting an enemy grants +20% skill damage for 5s.
    • Using a skill or damaging an enemy with a skill grants +20% weapon damage for 5s.
    • Damage increases are doubled while both buffs are active at the same time.
 

New Named Gear

  • Matador (Walker, Harris & Co. backpack) with Perfect Adrenaline Rush
    • When you are within 10m of an enemy, gain 23% bonus armor for 5s. Stacks up to 3 times.
    • Cooldown: 5s
    • Chainkiller (Walker, Harris & Co. chest) with Perfect Headhunter. After killing an enemy with a headshot, your next weapon hit within 30s deals 150% of that killing blow’s damage in addition to it.
    • Damage is capped to 800% of your weapon damage. This is raised to 1250% if your headshot damage is greater than 150%.
 

New Skill Variant

  • Repair Trap
    • The Repair Trap deploys a line of small devices capable of repairing friendlies in their proximity.
    • Note: The Repair Trap will not be available in-game until the Seasonal prime target unlocks in August.
 

New Talents

Weapon Talent: Future Perfect
  • Weapon kills grant +1 skill tier for 15s. Stacks up to 3 times.
  • Weapon kills at skill tier 6 grant overcharge for 15s.
  • Overcharge Cooldown: 90s
 
Weapon Talent: In Sync
  • Hitting an enemy grants +15% skill damage for 5s.
  • Using a skill or damaging an enemy with a skill grants +15% weapon damage for 5s.
  • Damage increases are doubled while both buffs are active at the same time.
 
Backpack Talent: Adrenaline Rush
  • When you are within 10m of an enemy, gain 20% bonus armor for 5s. Stacks up to 3 times.
  • Cooldown: 5s
 
Chest Talent: Headhunter
  • After killing an enemy with a headshot, your next weapon hit within 30s deals 125% of that killing blow’s damage in addition to it.
  • Damage is capped to 800% of your weapon damage. This is raised to 1250% if your headshot damage is greater than 150%.
 

Gameplay Changes

Missions

  • Reduced how many elites will spawn in the following mission:
    • Manning National Zoo
    • Coney Island Ballpark
    • Coney Island Amusement Park
    • Camp White Oak
    • Space Administration HQ
    • Federal Emergency Bunker
    • Wall Street
    • Liberty Island
    • Pathway Park
    • Stranded Tanker
    • The Tombs
 

Loot

  • General
    • Added all new season 2 weapons/gear to general loot pools
  • Item Power
    • Updated item power distribution to have a better spread between minimum and maximum for all difficulties
    • Increased minimum rolled item power for Field Proficiency/DZ caches, Clan caches and Season caches.
  • Difficulty Scaling
    • Regular loot from loot containers in Missions now scale with mission difficulty
    • Targeted loot from loot containers in Missions now scales with mission difficulty
    • Loot containers part of living world activities now scale with global difficulty
  • Targeted loot
    • Increased targeted loot drop chances for all mission and Control Point difficulties
    • Added new season 2 brand to targeted loot rotation
    • Warlords of New York brands can now also show up as targeted loot in DC, including Dark Zones
  • Named Items
    • Increased named item drop chance in regular Dark Zone loot
    • Increased named item drop chance in targeted loot everywhere
  • Exotics
    • Added Warlords of New York/Season 1 Exotics (excluding The Bighorn) to targeted loot
    • Added Warlords of New York/Season 1 Exotics (excluding The Bighorn) to general Exotic loot pools (Heroic/Legendary/Raid/Exotic Cache)
    • Coyote's Mask drop from Coyote no longer has a minimum season level requirement
  • Control Points
    • Removed regular weapon/gear loot containers not scaling with difficulty from Control Points
    • Increased the amount of scaling loot from the big Control Point reward container
  • Legendary
    • Increased NPC loot drop chance for Veterans and Elites on Legendary difficulty
 

Crafting

  • Crafting will now guarantee a higher minimum item power, resulting in higher overall stat rolls. An increased maximum item power also allows for better crafted items than before. The added weighting between the minimum and maximum power results in a more balanced average outcome for crafted and reconfigured items
  • Removed final World Tier 5 crafting bench upgrade, as its power increase is now redundant
 

Vendors

  • Added Named Items to both Open World and Dark Zone vendors
  • Increased prices for Named Items
  • Increased item power for all vendors
  • Vendors no longer sell Superior quality items at maximum level
 

SHD Levels

  • Added Field Proficiency cache to SHD level-up after reaching the maximum season level
  • Increased crafting material rewards for spending SHD level points in the Scavenging category
 

Conflict

  • Added Season/SHD experience gain on Conflict level-up
 

Rogue Agent Encounters

  • Every Rogue Agent killed will now drop loot
  • Rogue Agent encounters no longer occur during time trials
 

Control Point Officers

  • Players revived by a Control Point Officer will now have 80% of their armor restored (Previously 0%)
  • Reduced the likelihood of Control Point Officers being downed in combat
 

Bounties

  • Bounties acquired by speaking to characters in the open world will always be set to the difficulty at time of acquisition or higher.
  • This affects the Snitch and civilians rescued during the Public Execution or Rescue Living World Activities.
  • Scheduled bounties, such as daily and clan bounties, are unaffected.
Developer comment: Bounties acquired in the open world should always provide challenge and loot appropriate to the world they were acquired in. Upping your global difficulty now has the added benefit of improving all bounties you acquire within it.
 

Projects

  • New Season Pass Holder Project Slot.
    • Season Pass holders now have access to an exclusive daily mission which provides a large bonus to XP.
  • Weekly SHD Requisition Project Slot
    • Endgame players at World Tier 5 and Level 40 now have a weekly supplies donation project which rewards them with an exotic cache. (For World Tier 5 players, this replaces the previous daily SHD Requisition project.)
  • Legendary Mission Project
    • After TU10, completing any legendary mission will grant you the Weekly Legendary Mission project slot.
    • Completing the designated legendary mission will reward you with an exotic cache.
Developer comment: With the addition of "re-rolls" to exotics available through crafting, we created the new Weekly projects to provide a reliable supply of exotic components or exotic items.
 

RPG Balance

 

Incoming Repairs

  • Incoming Repairs no longer increases the amount of armor repaired by armor kits, talents or gear set effects.
Developer comment: Incoming Repairs was always meant to be the defensive attribute equivalent to Repair Skills, so that players could further enhance the amount of healing they receive from their skills, or the group's healer. Unfortunately, the underlying code prevented us from differentiating between alternate sources of armor repair, such as those from talents and gear sets like Foundry Bulwark, or Firewall's unique armor kit effect. We wanted to address this during the development of Warlords of New York, but chose to post-pone the fix in order to deal with higher priority issues at the time. We underestimated the extent to which this attribute would affect the new Warlords meta, and failed to predict the severity of degenerate gameplay it would cause when combined with certain talents or gear sets. It's important to stress that this is not a PvP-only issue, or an instance of the PvP environment affecting PvE balance. Incoming Repairs was compromising both aspects of the game, and needed to be addressed, especially considering this update coincides with the release of a new raid. Not addressing the issue would mean forcing ourselves to balance all existing and future gear and talents around the knowledge that players could potentially (read: very likely) double the amount of repairs they receive, which stifles creativity and effectively limits player choice.
 

Weapon Handling

  • 1% Weapon Handling now gives 1% Weapon Accuracy, Stability, Reload Speed, and Swap Speed, up from 0.25%.
  • Reduced the maximum amount of Weapon Handling rolled on gear by 6%, to a maximum of 8% at level 40.
Developer comment: In the current meta, Weapon Handling on gear is considered a dead stat with no significant benefit. In TU10, equipping a piece of gear with +8% Weapon Handling will now give you:
  • +8% Accuracy
  • +8% Stability
  • +8% Swap Speed
  • +8% Reload Speed
This should hopefully make Weapon Handling a strong complimentary attribute for players looking to increase their overall accuracy/stability (bloom + recoil) and/or reload/swap speed. Making the % amount of Weapon Accuracy/Stability/Swap Speed/Reload Speed gained from Weapon Handling 1:1 will also remove another element of arcane knowledge from the game and reduce the need for additional mental math when determining whether the bonus is an upgrade or not.
 

Talent Changes:

  • Leadership: Bonus Armor increased to 15% from 12%
  • Spike: Skill Damage Duration increased to 15s from 8s
  • Reformation: Skill Repair Duration increased to 15s from 8s
  • Creeping Death: No Longer goes on cooldown if there are no valid nearby enemies to apply a status effect to. Status effects applied now properly copy the source status effect’s damage and duration.
 

PvP

  • Global Damage Modifiers
    • Reduced all PvP weapon damage by -20%
  • Additional Damage Modifiers
    • Increased MMR PvP weapon damage by 12.5%
    • Reduced Assault Rifle PvP weapon damage by -15%
    • Reduced Shotgun PvP damage by -12.5%
    • Reduced SMG PvP damage by -10%
    • Reduced Pistol PvP damage by -10%
    • Reduced Rifle PvP damage by -5%
 
_Developer comment: With TU10, there have been significant buffs made to the base damage of assault rifles, SMGs, and shotguns in particular. In order to prevent those weapons from becoming overly powerful in PvP, we’ve had to lower their PvP damage modifiers to compensate.
Note: Assault rifles are still tuned to be 10% stronger than normal in PvP in order to compensate for their innate Damage to Health bonus being less useful against other players when compared to other weapon archetypes._
 
  • Specific Damage Modifiers
    • Increased Double Barrel Shotgun PvP damage by 16.6%
    • Reduced Pestilence PvP damage by -10%
    • Reduced Classic M1A damage by -5%
  • Exotic Modifiers
    • Merciless/Ruthless: “Binary Trigger” amplified weapon damage and explosion damage reduced by -50% in PvP
    • Dodge City Gunslinger’s Holster: “Quick Draw” damage bonus gained per stack in PvP lowered from +2% to +1%
      • Stacks gained per second in PvP now match the PvE value (0.5s to 0.3s)
    • Imperial Dynasty:
      • No longer automatically applies burn status effect to the nearest enemy in range.
      • Now requires maintaining range and LOS (line-of-sight) for 3 seconds between the holster bearer and nearest enemy before applying the burn status effect.
      • Added visual UI feedback to reveal the radius of effect in PvP and an indicator for LOS between the holster bearer and nearest enemy.
Developer comment: This should help address the lack of contextual feedback in PvP, and add a much needed window of opportunity for counterplay, or potential to avoid the incoming effect entirely.
 
  • * Pestilence * Plague of the Outcast damage-over-time effect no longer triggers True Patriot’s white debuff armor repair effect. (PvP and PvE)
Developer comment: While we like to embrace emergent or unintended mechanics when the end result is unique and fun gameplay, True Patriot’s white debuff explicitly states it requires shooting the debuffed target in order to receive the armor repair effect. Pestilence’s DoT managed to bypass this restriction, making it and True Patriot (especially when combined with Incoming Repairs) scale to disproportionate levels of power when used together.
 
  • Gear Set Modifiers
    • Negotiator’s Dilemma
      • Reduced the range at which marked targets can damage each other when critically hit to 15m (PvP only).
      • Added visual UI feedback when in range of another marked target.
  • Talent Modifiers
    • Efficient: Reduced specialization armor kit bonus from 100% to 50%
    • Versatile: Reduced the amplified weapon damage bonus for SMGs and shotguns from 35% to 25%
    • Vanguard: Reduced the duration of shield invulnerability from 5s to 2s
      • Note: UI will still show the old duration, but will be fixed in a later update.
    Specialization Modifiers * Firewall * Extracellular Matrix Mesh armor kit regen strength reduced by -50%, from 200% to 150%
  • Skill Modifiers
    • Pulse now correctly reveals and highlights all players in the DZ, not just hostiles/rogues
    • Increased Striker Drone damage by 30%
    • Increased Assault Turret damage by 55%
    • Reduced Firestarter Chem Launcher PvP damage by -20%
    • Reduced Bleed damage from Stinger Hive, Mortar Turret and Explosive Seeker Mine by 75%
    • Increased Stinger Hive damage by 20%, scaling up to 55% at skill tier 6
 
Developer commentary: We want dedicated skill builds to have multiple, powerful defensive tools for area denial/control. However, the strength of bleed effects meant being hit by just 1 stinger drone, mortar, or seeker mine was nearly a death sentence for most builds. The stinger hive should now better punish players who remain within its area of effect, rather than needing to rely entirely on the excessive damage of a single bleed DoT, while allowing the hive’s drone damage to scale higher for dedicated skill builds.
 

Weapon Balance

 

Assault Rifles

  • AK-M – 15.8% damage increase
  • F2000 – 14.3% damage increase
  • Military AK-M – 13.2% damage increase
  • Black Market AK-M – 13.2% damage increase
  • FAL – 12.0% damage increase
  • FAL SA-58 – 12.0% damage increase
  • FAL SA-58 Para – 12.0% damage increase
  • SOCOM Mk 16 – 11.4% damage increase
  • Tactical Mk 16 – 11.4% damage increase
  • Mk 16 – 11.4% damage increase
  • AUG A3-CQC – 11.2% damage increase
  • Honey Badger – 10.9% damage increase
  • FAMAS 2010 – 10.6% damage increase
  • ACR – 9.7% damage increase
  • ACR-E – 9.7% damage increase
  • Military G36 – 9.5% damage increase
  • G36 C – 9.5% damage increase
  • G36 Enhanced – 9.5% damage increase
  • Carbine 7 – 8.7 % damage increase
  • Military P416 – 7.4% damage increase
  • Custom P416 G3 - 7.4% damage increase
  • Police M4 – 6.8% damage increase
  • CTAR 21 – 8.6% damage increase
 

LMG

  • Classic M60 – 12.5% damage increase
  • Classic RPK-74 – 12.4% damage increase
  • Military RPK-74 M – 12.4% damage increase
  • Black Market RPK-74 E – 12.4% damage increase
  • Military M60 E4 – 9.2% damage increase
  • Black Market M60 E6 – 9.2% damage increase
  • Military L86 LSW – 8.5% damage increase
  • Custom L86 A2 – 8.5% damage increase
  • IWI NEGEV – 2.6% damage increase
  • Stoner LMG – 2.0% damage increase
  • M249 B – No changes
  • Tactical M249 Para – No changes
  • Military MK46 – No changes
  • MG5 – No changes
  • Infantry MG5 – 3.2% damage decrease
 

MMR

  • Model 700 – 14.9% damage increase
  • Hunting M44 – 13.5% damage increase
  • Classic M44 Carbine – 12.5% damage increase
  • G28 – 11.4% damage increase
  • SOCOM Mk20 SSR – 9.3% damage increase
  • SR-1 - 8.6% damage increase
  • Custom M44 – 8.1% damage increase
  • M700 Tactical – 8.1% damage increase
  • M700 Carbon – 8.1% damage increase
  • Covert SRS – 6.0% damage increase
  • SRS A1 – 6.0% damage increase
  • Surplus SVD – 2.9% damage decrease
  • Paratrooper SVD – 2.9% damage decrease
 

Rifles

  • UIC15 MOD – 21.6% damage increase
  • 1886 – 21.3% damage increase
  • LVOA-C – 12.1% damage increase
  • M1A CQB – 10.7% damage increase
  • Lightweight M4 – 10.5% damage increase
  • G 716 CQB – 8.7% damage increase
  • SIG 716 – 6.7% damage increase
  • ACR SS – 3.7% damage increase
  • SOCOM M1A – No changes
  • M16A2 – No changes
  • USC .45 ACP - 2.8% damage decrease
  • Urban MDR – 5.5% damage decrease
  • Military Mk17 – 11.8% damage decrease
  • Police Mk17 - 11.8% damage decrease
  • Classic M1A - 12.6% damage decrease
 

SMG

  • Tommy Gun – 38.8% damage increase
  • PP-19 – 29.6% damage increase
  • Enhanced PP-19 – 29.6% damage increase
  • MP7 – 27.5% damage increase
  • MPX – 17.7% damage increase
  • M1928 – 20.0% damage increase
  • P90 – 15.6% damage increase
  • Converted SMG-9 – 15.8% damage increase
  • Black Market T821 – 15.4% damage increase
  • Police T821 – 15.4% damage increase
  • Vector SBR .45 ACP – 14.7% damage increase
  • CMMG Banshee – 12.5% damage increase
  • Police UMP-45 – 12.0% damage increase
  • Tactical UMP-45 – 12.0% damage increase
  • AUG A3 Para XS – 11.8% damage increase
  • Enhanced AUG A3P – 11.8 % damage increase
  • Tactical AUG A3P – 11.8% damage increase
  • Converted SMG-9 A2 – 11.6% damage increase
  • MP5A2 – 10.0% damage increase
  • MP5-N – 10.0% damage increase
  • MP5 ST – 10.0% damage increase
  • Tactical Vector SBR 9mm – 5.9% damage increase
 

Shotguns

  • M870 Express – 23.3% damage increase
  • Military M870 – 23.3% damage increase
  • Custom M870 MCS – 23.3% damage increase
  • Super 90 – 23.2% damage increase
  • Marine Super 90 – 23.2% damage increase
  • Tactical Super 90 SBS – 23.2% damage increase
  • SASG-12 – 21.3% damage increase
  • Tactical SASG-12 K – 21.3% damage increase
  • Black Market SASG-12 S – 21.3% damage increase
  • SPAS-12 – 18.6% damage increase
  • KSG Shotgun – 9.0% damage increase
 

Sidearms

  • Double Barrel Sawed Off Shotgun – Optimal Range reduced to 8m from 11m
  • 586 Magnum – 68.8% damage increase
  • Police 686 Magnum – 68.8% damage increase
  • Maxim 9 - 23.5% damage increase
  • D50 – 17.5% damage increase
  • First Wave PF45 – 13.5% damage increase
  • Custom PF45 – 9.7% damage increase
  • Military M9 – 8.7% damage increase
  • 93R - 7.7% damage increase
  • Snubnosed Diceros – 6.5% damage increase
  • Officer's M9 A1 – 6.3% damage increase
  • Diceros – 5.9% damage increase
  • M45A1 – 9.5% damage decrease
  • Tactical M1911 – 9.5% damage decrease
  • M1911 – 7.3% damage decrease
 

Exotics Changes

Developer comment: Along with the buffs to weapon damage, TU10's significant buff to weapon handling meant some exotic weapon mods no longer made sense or resulted in over tuned performance that no longer fit with the original design. We also took this opportunity to make improvements to underperforming exotic
 
The Bighorn
  • Damage increased by +11.2%
  • Increased optimal range from 27m to 40m
  • Optics mod bonus increased from +0% to +30% Headshot Damage
  • Magazine mod bonus changed from +7% Headshot Damage to +10% Reload Speed
  • Added functionality that provides additional headshot damage, full talent is now:
    • When scoped, switches to semi-automatic fire mode, dealing 450% weapon damage with each shot.
    • (New) Headshots grant +2% headshot damage. Stacks up to 50 times. Resets to 0 at full stacks.
 
Eagle Bearer
  • Damage increased by +7.8%
  • Underbarrel mod bonus changed from +10% Stability to +10% Weapon Handling
 
Chameleon
  • Damage increased by +32.8%
  • Optics mod bonus changed from +15% Accuracy to +15% Critical Hit Chance
  • Muzzle mod bonus changed from +5% Critical Hit Chance to +20% Accuracy
  • Underbarrel mod bonus changed from +10% Critical Hit Chance to +10% Stability
  • Optimal range increased by 33.3%, from 15m to 20m
  • Long range effectiveness increased by 19%, from 42m to 50m
  • Added functionality that retains your current buffs to the next combat encounter when combat ends, full talent is now:
    • Hitting 30 headshots grant +20% critical hit chance and +50% critical hit damage for 45s.
    • Hitting 75 body-shots grant +90% weapon damage for 45s.
    • Hitting 30 leg-shots grant +150% reload speed for 45s.
    • (New) Buffs refresh when out of combat.
 
Bullet King
  • Damage increased by +2.6%
 
Nemesis
  • Damage increased by +11.1%
  • Optics mod bonus increased from +35% to +45% Headshot Damage
  • Underbarrel mod bonus reduced from +15% to +5% Weapon Handling
 
Liberty
  • Optics mod bonus changed from +5% Critical Hit Chance to +5% Headshot Damage
  • Muzzle mod bonus changed from +15% Stability to +5% Critical Hit Chance
  • Magazine mod bonus changed from +15% Reload Speed to +15% Weapon Handling
  • Added functionality to provide extra damage if you're trying to keep stacks, full talent is now:
    • (New) Hits grant +2% weapon damage. Stacks up to 30.
    • Headshots consume all stacks, repairing your shield for 3% per stack.
  • No longer highlights enemy weakpoints when aiming.
 
Merciless/Ruthless
  • Damage increased by +12.5%
  • Muzzle mod bonus reduced from +20% to +10% Stability
  • Underbarrel mod bonus reduced from +20% to +10% Weapon Handling
  • Magazine mod bonus reduced from +15% to +10% Reload Speed
  • Added functionality to provide extra non-explosive damage as well, full talent is now:
    • This weapon fires on trigger pull and release.
    • If both bullets hit the same enemy, gain a stack.
    • (New) At 7 stacks, shooting an enemy deals 500% amplified damage and creates a 7m explosion dealing 500% weapon damage, consuming the stacks.
 
Developer Comment: Merciless was previously balanced for its very unwieldy handling and compensated with very high burst damage. With access to much higher accuracy and stability, Binary Trigger’s explosion strength has been toned down.
 
Diamondback
  • Damage increased by +7.7%
  • Text updated to clarify a new target isn’t marked until after the 5s buff.
 
Lullaby/Sweet Dreams
  • Damage increased by +11.0%
 
Lady Death
  • Damage increased by +18.9%
  • Optics mod bonus increased from +5% to +10% Critical Hit Chance
  • Muzzle mod bonus changed from +5% Critical Hit Chance to +5% Critical Hit Damage
  • Underbarrel mod changed from +5% Critical Hit Damage to +500% Melee Damage
  • Breathe Free: Lowered the amount of maximum stacks from 40 to 32, and increased the damage amplification per stack from 60% to 75%
 
The Chatterbox
  • Damage increased by +16.7%
  • Optics mod bonus increased from +5% to +15% Critical Hit Chance
  • Muzzle mod bonus changed from +10% Critical Hit Chance to +5% Critical Hit Damage
  • Underbarrel mod bonus reduced from +15% to +10% Weapon Handling
  • Magazine mod bonus changed from +10% Reload Speed to +10 Rounds
  • Magazine base capacity reduced from 60 to 50
 
Pestilence
  • Muzzle mod bonus changed from +10% Stability to +10% Accuracy
  • Underbarrel mod bonus changed from +10% Weapon Handling to +10% Stability
 
NinjaBike Messenger Kneepads
  • Added functionality to add bonus armor, full talent is now:
    • (New) Performing a cover to cover or vaulting reloads your drawn weapon and grants +25% bonus armor for 5s.
 
Dodge City Gunslinger Holster
  • Added functionality that makes your hit do headshot damage, full talent is now:
    • While your pistol is holstered, gain a stacking buff every 0.3s, up to 100. When you swap to it, your first shot consumes the buff and deals +10% damage per stack.
    • (New) This deals headshot damage to anywhere you hit.
 
BTSU Datagloves
  • Changed functionality to no longer grant group/raid-wide overcharge unless you are skill tier 6
  • Added functionality to provide hive skill haste, full talent is now:
    • (New) Grants +15% Hive skill haste per skill tier.
    • (Changed) Detonating a hive refreshes your skill cooldowns and grants overcharge for 15s.If at Skill Tier 6, this effect also applies to all allies.
    • Allies receiving this effect are unable to benefit from it again for 120s.
 
Sawyer's Kneeguards
  • Added functionality to continue to provide damage bonus move for a short duration, full talent is now:
    • Cannot be staggered by explosions.
    • Increases total weapon damage by 3% each second you are not moving. Stacks up to 10 until you start moving.
    • (New) All stacks lost 10s after moving.
 

Gear Set Changes

Hard Wired
  • Feedback Loop no longer fully refreshes the cooldown of a skill, but instead reduces it by up to 30s
 
Ongoing Directive
  • Main Talent
    • Hollow-Point Ammo is no longer dropped on kill, and instead automatically added to your active weapon when killing status afflicted enemies
    • Backpack Talent (New)
  • “Trauma Specialist”
    • Increases the duration of your bleed status effects by 50% and all bleed damage done by 100%
    • Increased 3-piece Reload Speed bonus from +20% to +30%
 
Tip of the Spear
  • Main Talent (PVE)
    • Aggressive Recon's weapon damage buff is now gained when dealing specialization weapon damage, instead of on specialization weapon kill
  • Main Talent (PVP)
    • Aggressive Recon's weapon damage buff is now gained when dealing grenade damage, instead of on grenade kill
  • Backpack Talent (New)
    • “Signature Moves”
    • Increases specialization weapon damage by 20%, and doubles the amount of specialization ammo generated by Aggressive Recon
 
Aces and Eights
  • Main Talent
    • "Poker Face" backpack talent is now a baseline effect:
    • Flip an additional card on headshots
  • Backpack Talent (New)
    • “Ace in the Sleeve”
    • Amplifies 1 extra shot when revealing your hand
    • 3-piece Headshot Damage bonus is now additive, rather than multiplicative
    • Increased 3-piece Headshot Damage bonus from +20% to +30%
 
System Corruption
  • Main Talent
    • Now repairs 20% of your armor in addition to granting 50% bonus armor
    • Increases total weapon damage by 1% per 5% bonus armor gained, up to 20%
 
Striker’s Battlegear
  • Main Talent
    • Reduced the number of stacks lost on missed shots from 3 to 2
  • Backpack Talent
    • No longer reduces number of stacks lost on missed shots
    • (New) Increases total weapon damage gained per stack of Striker's Gamble from 0.5% to 0.65%.
 
Negotiators Dilemma
  • Damage transfers on the initial bullet that marks a new target
 
Hard Wired
  • Increased 3-piece Repair Skills bonus from +15% to +30%
 
Brand Set Changes Alps Summit Armament
  • Increased 1-piece Repair Skills bonus from +15% to +20%
 
Murakami Industries
  • Increased 2-piece Repair Skills bonus from +15% to +20%
 
Richter & Kaiser
  • Increased 3-piece Repair Skills bonus from +15% to +20%
  • Incoming Repairs brand set bonus increased from +15% to +20%
 
Providence Defense
  • Increased 1-piece Headshot Damage bonus from +10% to +15%
 
Airaldi Holdings
  • Increased 2-piece Headshot Damage bonus from +10% to +15%
 
Grupo Sombra S.A
  • Increased 3-piece Headshot Damage bonus from +10% to +15%
 
Overlord Armaments
  • Increased 2-piece Accuracy bonus from +10% to +20%
 
Douglas & Harding
  • Increased 2-piece Stability bonus from +10% to +20%
  • Increased 3-piece Accuracy bonus from +10% to +20%
 
Fenris Group AB
  • Increased 2-piece Reload Speed bonus from +10% to +20%
  • Increased 3-piece Stability bonus from +10% to +20%
 

Specialization Changes

  • Gunner specialization's Emplacement talent Weapon Handling bonus reduced from +15% to +10%
    • Note: The UI will incorrectly say it still adds +15% Weapon Handling. This will be fixed in a future update.
 

Skill Changes

UI
  • Stinger Hive, Mortar Turret, and Explosive Seeker Mine now display its Bleed Damage and Duration
 
Seeker Mine
  • Cluster Seeker Mine targeting accuracy improved
Developer comment: The Cluster Seeker Mine is not intended to be as accurate as the Explosive variant. Once it is a certain distance from its target it locks the location it is aiming for and continues towards that regardless of where its original target agent has since moved to. This "bullcharge" behavior reflects the mini-mines' less advanced technology and balances the skill mod's effectiveness. This said, we have noticed that the Cluster Seeker's accuracy has been a source of frustration so we've shortened the distance until it activates its "bullcharge" and adjusted when it decides to explode. These adjustments should make the Cluster Seeker feel more accurate, but these are measured steps as we do not want the skill to return to its OP TU7-state.
 
Hive
  • Stinger Hive base damage reduced -20%
  • Stinger Hive damage bonus per skill tier increased from +10% to +20%
Developer comment: In order to make investing in skill tiers have a greater impact on the Stinger Hive's damage, we slightly reduced base drone damage, while doubling the amount of damage gained with each skill tier. These changes will result in a net buff for dedicated skill builds, with a 10% increase in Stinger Hive drone damage at skill tier 6.
  • Restorer hive gains +5% drone flight speed per skill tier
Developer comment: Increases to the Restorer Hive's radius had the unfortunate effect of increasing the time it took for repair drones to reach their target the further they were from the hive. Increasing drone flight speed with each skill tier should help offset that somewhat counter-intuitive behavior when taking advantage of the increased area of effect, and make the Restorer Hive a more reliable tool for healers.
 
Chem Launcher
  • Riot Foam Chem Launcher ensnare duration bonus per skill tier reduced from +20% to +10%
  • Reinforcer Chem Launcher: UI has been updated to clarify that the initial heal only affects allies and not the Skill user. The functionality has not changed.
 
Firefly
  • Blinder Firefly blind duration bonus per skill tier reduced from +20% to +10%
  • Blinder Firefly base blind duration reduced from 6s to 5s
 
Pulse
  • Banshee Pulse cooldown increased from 20s to 30s
  • Banshee Pulse base confuse duration reduced from 5s to 4s
  • Jammer Pulse base disrupt duration reduced from 4s to 3s
 
Shock Trap
  • Shock Trap base shock duration reduced from 5s to 3s (PvP duration remains unchanged)
  • Shock Trap base radius increased from 2m to 2.5m
  • When the active duration ends, its cooldown is refunded an equal number of seconds that it was active.
 

Further Bugfixes:

=> Source
submitted by JokerUnique to thedivision [link] [comments]

ResultsFileName = 0×0 empty char array Why? Where are my results?

Edit: Turns out I was missing a needed toolbox.
Hello,
I am not getting any errors and I do not understand why I am not getting any output. I am trying to batch process a large number of ecg signals. Below is my code and the two relevant functions. Any help greatly appreciated. I am very new.
d = importSections("Dx_sections.csv"); % set the number of recordings n = height(d); % settings HRVparams = InitializeHRVparams('test_physionet') for ii = 1:n % Import waveform (ECG) [record, signals] = read_edf(strcat(d.PID(ii), '/baseline.edf')); myecg = record.ECG; Ann = []; [HRVout, ResultsFileName] = Main_HRV_Analysis(myecg,'','ECGWaveform',HRVparams) end function [HRVout, ResultsFileName ] = Main_HRV_Analysis(InputSig,t,InputFormat,HRVparams,subID,ann,sqi,varargin) % ====== HRV Toolbox for PhysioNet Cardiovascular Signal Toolbox ========= % % Main_HRV_Analysis(InputSig,t,InputFormat,HRVparams,subID,ann,sqi,varargin) % OVERVIEW: % % INPUT: % InputSig - Vector containing RR intervals data (in seconds) % or ECG/PPG waveform % t - Time indices of the rr interval data (seconds) or % leave empty for ECG/PPG input % InputFormat - String that specifiy if the input vector is: % 'RRIntervals' for RR interval data % 'ECGWaveform' for ECG waveform % 'PPGWaveform' for PPG signal % HRVparams - struct of settings for hrv_toolbox analysis that can % be obtained using InitializeHRVparams.m function % HRVparams = InitializeHRVparams(); % % % OPTIONAL INPUTS: % subID - (optional) string to identify current subject % ann - (optional) annotations of the RR data at each point % indicating the type of the beat % sqi - (optional) Signal Quality Index; Requires a % matrix with at least two columns. Column 1 % should be timestamps of each sqi measure, and % Column 2 should be SQI on a scale from 0 to 1. % Use InputSig, Type pairs for additional signals such as ABP % or PPG signal. The input signal must be a vector containing % signal waveform and the Type: 'ABP' and\or 'PPG'. % % OUTPUS: % results - HRV time and frequency domain metrics as well % as AC and DC, SDANN and SDNNi % ResultsFileName - Name of the file containing the results % % NOTE: before running this script review and modifiy the parameters % in "initialize_HRVparams.m" file accordingly with the specific % of the new project (see the readme.txt file for further details) % EXAMPLES % - rr interval input % Main_HRV_Analysis(RR,t,'RRIntervals',HRVparams) % - ECG wavefrom input % Main_HRV_Analysis(ECGsig,t,'ECGWavefrom',HRVparams,'101') % - ECG waveform and also ABP and PPG waveforms % Main_HRV_Analysis(ECGsig,t,'ECGWaveform',HRVparams,[],[],[], abpSig, % 'ABP', ppgSig, 'PPG') % % DEPENDENCIES & LIBRARIES: % HRV Toolbox for PhysioNet Cardiovascular Signal Toolbox % https://github.com/cliffordlab/PhysioNet-Cardiovascular-Signal-Toolbox % % REFERENCE: % Vest et al. "An Open Source Benchmarked HRV Toolbox for Cardiovascular % Waveform and Interval Analysis" Physiological Measurement (In Press), 2018. % % REPO: % https://github.com/cliffordlab/PhysioNet-Cardiovascular-Signal-Toolbox % ORIGINAL SOURCE AND AUTHORS: % This script written by Giulia Da Poian % Dependent scripts written by various authors % (see functions for details) % COPYRIGHT (C) 2018 % LICENSE: % This software is offered freely and without warranty under % the GNU (v3 or later) public license. See license file for % more information %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if nargin < 4 error('Wrong number of input arguments') end if nargin < 5 subID = '0000'; end if nargin < 6 ann = []; end if nargin < 7 sqi = []; end if length(varargin) == 1 || length(varargin) == 3 error('Incomplete Signal-Type pair') elseif length(varargin) == 2 extraSigType = varargin(2); extraSig = varargin{1}; elseif length(varargin) == 4 extraSigType = [varargin(2) varargin(4)]; extraSig = [varargin{1} varargin{3}]; end if isa(subID,'cell'); subID = string(subID); end % Control on signal length if (strcmp(InputFormat, 'ECGWaveform') && length(InputSig)/HRVparams.Fs< HRVparams.windowlength) ... || (strcmp(InputFormat, 'PPGWaveform') && length(InputSig)/HRVparams.Fs 300 s VLF = [0.0033 .04]; % Requires at least 300 s window LF = [.04 .15]; % Requires at least 25 s window HF = [0.15 0.4]; % Requires at least 7 s window HRVparams.freq.limits = [ULF; VLF; LF; HF]; HRVparams.freq.zero_mean = 1; % Default: 1, Option for subtracting the mean from the input data HRVparams.freq.method = 'lomb'; % Default: 'lomb' % Options: 'lomb', 'burg', 'fft', 'welch' HRVparams.freq.plot_on = 0; % The following settings are for debugging spectral analysis methods HRVparams.freq.debug_sine = 0; % Default: 0, Adds sine wave to tachogram for debugging HRVparams.freq.debug_freq = 0.15; % Default: 0.15 HRVparams.freq.debug_weight = .03; % Default: 0.03 % Lomb: HRVparams.freq.normalize_lomb = 0; % Default: 0 % 1 = Normalizes Lomb Periodogram, % 0 = Doesn't normalize % Burg: (not recommended) HRVparams.freq.burg_poles = 15; % Default: 15, Number of coefficients % for spectral estimation using the Burg % method (not recommended) % The following settings are only used when the user specifies spectral % estimation methods that use resampling : 'welch','fft', 'burg' HRVparams.freq.resampling_freq = 7; % Default: 7, Hz HRVparams.freq.resample_interp_method = 'cub'; % Default: 'cub' % 'cub' = cublic spline method % 'lin' = linear spline method HRVparams.freq.resampled_burg_poles = 100; % Default: 100 %% 11. SDANN and SDNNI Analysis Settings HRVparams.sd.on = 1; % Default: 1, SD analysis 1=On or 0=Off HRVparams.sd.segmentlength = 300; % Default: 300, windows length in seconds %% 12. PRSA Analysis Settings HRVparams.prsa.on = 1; % Default: 1, PRSA Analysis 1=On or 0=Off HRVparams.prsa.win_length = 30; % Default: 30, The length of the PRSA signal % before and after the anchor points % (the resulting PRSA has length 2*L) HRVparams.prsa.thresh_per = 20; % Default: 20%, Percent difference that one beat can % differ from the next in the prsa code HRVparams.prsa.plot_results = 0; % Default: 0 HRVparams.prsa.scale = 2; % Default: 2, scale parameter for wavelet analysis (to compute AC and DC) %% 13. Peak Detection Settings % The following settings are for jqrs.m HRVparams.PeakDetect.REF_PERIOD = 0.250; % Default: 0.25 (should be 0.15 for FECG), refractory period in sec between two R-peaks HRVparams.PeakDetect.THRES = .6; % Default: 0.6, Energy threshold of the detector HRVparams.PeakDetect.fid_vec = []; % Default: [], If some subsegments should not be used for finding the optimal % threshold of the P&T then input the indices of the corresponding points here HRVparams.PeakDetect.SIGN_FORCE = []; % Default: [], Force sign of peaks (positive value/negative value) HRVparams.PeakDetect.debug = 0; % Default: 0 HRVparams.PeakDetect.ecgType = 'MECG'; % Default : MECG, options (adult MECG) or featl ECG (fECG) HRVparams.PeakDetect.windows = 15; % Befautl: 15,(in seconds) size of the window onto which to perform QRS detection %% 14. Entropy Settings % Multiscale Entropy HRVparams.MSE.on = 1; % Default: 1, MSE Analysis 1=On or 0=Off HRVparams.MSE.windowlength = []; % Default: [], windows size in seconds, default perform MSE on the entire signal HRVparams.MSE.increment = []; % Default: [], window increment HRVparams.MSE.RadiusOfSimilarity = 0.15; % Default: 0.15, Radius of similarity (% of std) HRVparams.MSE.patternLength = 2; % Default: 2, pattern length HRVparams.MSE.maxCoarseGrainings = 20; % Default: 20, Maximum number of coarse-grainings % SampEn an ApEn HRVparams.Entropy.on = 1; % Default: 1, MSE Analysis 1=On or 0=Off HRVparams.Entropy.RadiusOfSimilarity = 0.15; % Default: 0.15, Radius of similarity (% of std) HRVparams.Entropy.patternLength = 2; % Default: 2, pattern length %% 15. DFA Settings HRVparams.DFA.on = 1; % Default: 1, DFA Analysis 1=On or 0=Off HRVparams.DFA.windowlength = []; % Default [], windows size in seconds, default perform DFA on the entair signal HRVparams.DFA.increment = []; % Default: [], window increment HRVparams.DFA.minBoxSize = 4 ; % Default: 4, Smallest box width HRVparams.DFA.maxBoxSize = []; % Largest box width (default in DFA code: signal length/4) HRVparams.DFA.midBoxSize = 16; % Medium time scale box width (default in DFA code: 16) %% 16. Poincaré plot HRVparams.poincare.on = 1; % Default: 1, Poincare Analysis 1=On or 0=Off %% 17. Heart Rate Turbulence (HRT) - Settings HRVparams.HRT.on = 1; % Default: 1, HRT Analysis 1=On or 0=Off HRVparams.HRT.BeatsBefore = 2; % Default: 2, # of beats before PVC HRVparams.HRT.BeatsAfter = 16; % Default: 16, # of beats after PVC and CP HRVparams.HRT.GraphOn = 0; % Default: 0, do not plot HRVparams.HRT.windowlength = 24; % Default 24h, windows size in hours HRVparams.HRT.increment = 24; % Default 24h, sliding window increment in hours HRVparams.HRT.filterMethod = 'mean5before'; % Default mean5before, HRT filtering option %% 18. Output Settings HRVparams.gen_figs = 0; % Generate figures HRVparams.save_figs = 0; % Save generated figures if HRVparams.save_figs == 1 HRVparams.gen_figs = 1; end % Format settings for HRV Outputs HRVparams.output.format = 'csv'; % 'csv' - creates csv file for output % 'mat' - creates .mat file for output HRVparams.output.separate = 0; % Default : 1 = separate files for each subject % 0 = all results in one file HRVparams.output.num_win = []; % Specify number of lowest hr windows returned % leave blank if all windows should be returned % Format settings for annotations generated HRVparams.output.ann_format = 'binary'; % 'binary' = binary annotation file generated % 'csv' = ASCII CSV file generated end 
submitted by MisuzBrisby to matlab [link] [comments]

AJ ALMENDINGER

glimpse into the future of Roblox

Our vision to bring the world together through play has never been more relevant than it is now. As our founder and CEO, David Baszucki (a.k.a. Builderman), mentioned in his keynote, more and more people are using Roblox to stay connected with their friends and loved ones. He hinted at a future where, with our automatic machine translation technology, Roblox will one day act as a universal translator, enabling people from different cultures and backgrounds to connect and learn from each other.
During his keynote, Builderman also elaborated upon our vision to build the Metaverse; the future of avatar creation on the platform (infinitely customizable avatars that allow any body, any clothing, and any animation to come together seamlessly); more personalized game discovery; and simulating large social gatherings (like concerts, graduations, conferences, etc.) with tens of thousands of participants all in one server. We’re still very early on in this journey, but if these past five months have shown us anything, it’s clear that there is a growing need for human co-experience platforms like Roblox that allow people to play, create, learn, work, and share experiences together in a safe, civil 3D immersive space.
Up next, our VP of Developer Relations, Matt Curtis (a.k.a. m4rrh3w), shared an update on all the things we’re doing to continue empowering developers to create innovative and exciting content through collaboration, support, and expertise. He also highlighted some of the impressive milestones our creator community has achieved since last year’s RDC. Here are a few key takeaways:
And lastly, our VP of Engineering, Technology, Adam Miller (a.k.a. rbadam), unveiled a myriad of cool and upcoming features developers will someday be able to sink their teeth into. We saw a glimpse of procedural skies, skinned meshes, more high-quality materials, new terrain types, more fonts in Studio, a new asset type for in-game videos, haptic feedback on mobile, real-time CSG operations, and many more awesome tools that will unlock the potential for even bigger, more immersive experiences on Roblox.

Vibin’

Despite the virtual setting, RDC just wouldn’t have been the same without any fun party activities and networking opportunities. So, we invited special guests DJ Hyper Potions and cyber mentalist Colin Cloud for some truly awesome, truly mind-bending entertainment. Yoga instructor Erin Gilmore also swung by to inspire attendees to get out of their chair and get their body moving. And of course, we even had virtual rooms dedicated to karaoke and head-to-head social games, like trivia and Pictionary.
Over on the networking side, Team Adopt Me, Red Manta, StyLiS Studios, and Summit Studios hosted a virtual booth for attendees to ask questions, submit resumes, and more. We also had a networking session where three participants would be randomly grouped together to get to know each other.

What does Roblox mean to you?

We all know how talented the Roblox community is from your creations. We’ve heard plenty of stories over the years about how Roblox has touched your lives, how you’ve made friendships, learned new skills, or simply found a place where you can be yourself. We wanted to hear more. So, we asked attendees: What does Roblox mean to you? How has Roblox connected you? How has Roblox changed your life? Then, over the course of RDC, we incorporated your responses into this awesome mural.
📷
Created by Alece Birnbach at Graphic Recording Studio

Knowledge is power

This year’s breakout sessions included presentations from Roblox developers and staff members on the latest game development strategies, a deep dive into the Roblox engine, learning how to animate with Blender, tools for working together in teams, building performant game worlds, and the new Creator Dashboard. Dr. Michael Rich, Associate Professor at Harvard Medical School and Physician at Boston Children’s Hospital, also led attendees through a discussion on mental health and how to best take care of you and your friends’ emotional well-being, especially now during these challenging times.
📷
Making the Dream Work with Teamwork (presented by Roblox developer Myzta)
In addition to our traditional Q&A panel with top product and engineering leaders at Roblox, we also held a special session with Builderman himself to answer the community’s biggest questions.
📷
Roblox Product and Engineering Q&A Panel

2020 Game Jam

The Game Jam is always one of our favorite events of RDC. It’s a chance for folks to come together, flex their development skills, and come up with wildly inventive game ideas that really push the boundaries of what’s possible on Roblox. We had over 60 submissions this year—a new RDC record.
Once again, teams of up to six people from around the world had less than 24 hours to conceptualize, design, and publish a game based on the theme “2020 Vision,” all while working remotely no less! To achieve such a feat is nothing short of awe-inspiring, but as always, our dev community was more than up for the challenge. I’ve got to say, these were some of the finest creations we’ve seen.
WINNERS
Best in Show: Shapescape Created By: GhettoMilkMan, dayzeedog, maplestick, theloudscream, Brick_man, ilyannna You awaken in a strange laboratory, seemingly with no way out. Using a pair of special glasses, players must solve a series of anamorphic puzzles and optical illusions to make their escape.
Excellence in Visual Art: agn●sia Created By: boatbomber, thisfall, Elttob An obby experience unlike any other, this game is all about seeing the world through a different lens. Reveal platforms by switching between different colored lenses and make your way to the end.
Most Creative Gameplay: Visions of a perspective reality Created By: Noble_Draconian and Spathi Sometimes all it takes is a change in perspective to solve challenges. By switching between 2D and 3D perspectives, players can maneuver around obstacles or find new ways to reach the end of each level.
Outstanding Use of Tech: The Eyes of Providence Created By: Quenty, Arch_Mage, AlgyLacey, xJennyBeanx, Zomebody, Crykee This action/strategy game comes with a unique VR twist. While teams fight to construct the superior monument, two VR players can support their minions by collecting resources and manipulating the map.
Best Use of Theme: Sticker Situation Created By: dragonfrosting and Yozoh Set in a mysterious art gallery, players must solve puzzles by manipulating the environment using a magic camera and stickers. Snap a photograph, place down a sticker, and see how it changes the world.
OTHER TOP PICKS
HONORABLE MENTIONS
For the rest of the 2020 Game Jam submissions, check out the list below:
20-20 Vision | 20/20 Vision | 2020 Vision, A Crazy Perspective | 2020 Vision: Nyon | A Wild Trip! | Acuity | Best Year Ever | Better Half | Bloxlabs | Climb Stairs to 2021 | Double Vision (Team hey apple) | Eyebrawl | Eyeworm Exam | FIRE 2020 | HACKED | Hyperspective | Lucid Scream | Mystery Mansion | New Years at the Museum | New Year’s Bash | Poor Vision | Predict 2020 | RBC News | Retrovertigo | Second Wave | see no evil | Sight Fight | Sight Stealers | Spectacles Struggle | Specter Spectrum | Survive 2020 | The Lost Chicken Leg | The Outbreak | The Spyglass | Time Heist | Tunnel Vision | Virtual RDC – The Story | Vision (Team Freepunk) | Vision (Team VIP People ####) | Vision Developers Conference 2020 | Vision Is Key | Vision Perspective | Vision Racer | Visions | Zepto
And last but not least, we wanted to give a special shout out to Starboard Studios. Though they didn’t quite make it on time for our judges, we just had to include Dave’s Vision for good measure. 📷
Thanks to everyone who participated in the Game Jam, and congrats to all those who took home the dub in each of our categories this year. As the winners of Best in Show, the developers of Shapescape will have their names forever engraved on the RDC Game Jam trophy back at Roblox HQ. Great work!

‘Til next year

And that about wraps up our coverage of the first-ever digital RDC. Thanks to all who attended! Before we go, we wanted to share a special “behind the scenes” video from the 2020 RDC photoshoot.
Check it out:
It was absolutely bonkers. Getting 350 of us all in one server was so much fun and really brought back the feeling of being together with everyone again. That being said, we can’t wait to see you all—for real this time—at RDC next year. It’s going to be well worth the wait. ‘Til we meet again, my friends.
© 2020 Roblox Corporation. All Rights Reserved.

Improving Simulation and Performance with an Advanced Physics Solver

August

05, 2020

by chefdeletat
PRODUCT & TECH
📷In mid-2015, Roblox unveiled a major upgrade to its physics engine: the Projected Gauss-Seidel (PGS) physics solver. For the first year, the new solver was optional and provided improved fidelity and greater performance compared to the previously used spring solver.
In 2016, we added support for a diverse set of new physics constraints, incentivizing developers to migrate to the new solver and extending the creative capabilities of the physics engine. Any new places used the PGS solver by default, with the option of reverting back to the classic solver.
We ironed out some stability issues associated with high mass differences and complex mechanisms by the introduction of the hybrid LDL-PGS solver in mid-2018. This made the old solver obsolete, and it was completely disabled in 2019, automatically migrating all places to the PGS.
In 2019, the performance was further improved using multi-threading that splits the simulation into jobs consisting of connected islands of simulating parts. We still had performance issues related to the LDL that we finally resolved in early 2020.
The physics engine is still being improved and optimized for performance, and we plan on adding new features for the foreseeable future.

Implementing the Laws of Physics

📷
The main objective of a physics engine is to simulate the motion of bodies in a virtual environment. In our physics engine, we care about bodies that are rigid, that collide and have constraints with each other.
A physics engine is organized into two phases: collision detection and solving. Collision detection finds intersections between geometries associated with the rigid bodies, generating appropriate collision information such as collision points, normals and penetration depths. Then a solver updates the motion of rigid bodies under the influence of the collisions that were detected and constraints that were provided by the user.
📷
The motion is the result of the solver interpreting the laws of physics, such as conservation of energy and momentum. But doing this 100% accurately is prohibitively expensive, and the trick to simulating it in real-time is to approximate to increase performance, as long as the result is physically realistic. As long as the basic laws of motion are maintained within a reasonable tolerance, this tradeoff is completely acceptable for a computer game simulation.

Taking Small Steps

The main idea of the physics engine is to discretize the motion using time-stepping. The equations of motion of constrained and unconstrained rigid bodies are very difficult to integrate directly and accurately. The discretization subdivides the motion into small time increments, where the equations are simplified and linearized making it possible to solve them approximately. This means that during each time step the motion of the relevant parts of rigid bodies that are involved in a constraint is linearly approximated.
📷📷
Although a linearized problem is easier to solve, it produces drift in a simulation containing non-linear behaviors, like rotational motion. Later we’ll see mitigation methods that help reduce the drift and make the simulation more plausible.

Solving

📷
Having linearized the equations of motion for a time step, we end up needing to solve a linear system or linear complementarity problem (LCP). These systems can be arbitrarily large and can still be quite expensive to solve exactly. Again the trick is to find an approximate solution using a faster method. A modern method to approximately solve an LCP with good convergence properties is the Projected Gauss-Seidel (PGS). It is an iterative method, meaning that with each iteration the approximate solution is brought closer to the true solution, and its final accuracy depends on the number of iterations.
📷
This animation shows how a PGS solver changes the positions of the bodies at each step of the iteration process, the objective being to find the positions that respect the ball and socket constraints while preserving the center of mass at each step (this is a type of positional solver used by the IK dragger). Although this example has a simple analytical solution, it’s a good demonstration of the idea behind the PGS. At each step, the solver fixes one of the constraints and lets the other be violated. After a few iterations, the bodies are very close to their correct positions. A characteristic of this method is how some rigid bodies seem to vibrate around their final position, especially when coupling interactions with heavier bodies. If we don’t do enough iterations, the yellow part might be left in a visibly invalid state where one of its two constraints is dramatically violated. This is called the high mass ratio problem, and it has been the bane of physics engines as it causes instabilities and explosions. If we do too many iterations, the solver becomes too slow, if we don’t it becomes unstable. Balancing the two sides has been a painful and long process.

Mitigation Strategies

📷A solver has two major sources of inaccuracies: time-stepping and iterative solving (there is also floating point drift but it’s minor compared to the first two). These inaccuracies introduce errors in the simulation causing it to drift from the correct path. Some of this drift is tolerable like slightly different velocities or energy loss, but some are not like instabilities, large energy gains or dislocated constraints.
Therefore a lot of the complexity in the solver comes from the implementation of methods to minimize the impact of computational inaccuracies. Our final implementation uses some traditional and some novel mitigation strategies:
  1. Warm starting: starting with the solution from a previous time-step to increase the convergence rate of the iterative solver
  2. Post-stabilization: reprojecting the system back to the constraint manifold to prevent constraint drift
  3. Regularization: adding compliance to the constraints ensuring a solution exists and is unique
  4. Pre-conditioning: using an exact solution to a linear subsystem, improving the stability of complex mechanisms
Strategies 1, 2 and 3 are pretty traditional, but 3 has been improved and perfected by us. Also, although 4 is not unheard of, we haven’t seen any practical implementation of it. We use an original factorization method for large sparse constraint matrices and a new efficient way of combining it with the PGS. The resulting implementation is only slightly slower compared to pure PGS but ensures that the linear system coming from equality constraints is solved exactly. Consequently, the equality constraints suffer only from drift coming from the time discretization. Details on our methods are contained in my GDC 2020 presentation. Currently, we are investigating direct methods applied to inequality constraints and collisions.

Getting More Details

Traditionally there are two mathematical models for articulated mechanisms: there are reduced coordinate methods spearheaded by Featherstone, that parametrize the degrees of freedom at each joint, and there are full coordinate methods that use a Lagrangian formulation.
We use the second formulation as it is less restrictive and requires much simpler mathematics and implementation.
The Roblox engine uses analytical methods to compute the dynamic response of constraints, as opposed to penalty methods that were used before. Analytics methods were initially introduced in Baraff 1989, where they are used to treat both equality and non-equality constraints in a consistent manner. Baraff observed that the contact model can be formulated using quadratic programming, and he provided a heuristic solution method (which is not the method we use in our solver).
Instead of using force-based formulation, we use an impulse-based formulation in velocity space, originally introduced by Mirtich-Canny 1995 and further improved by Stewart-Trinkle 1996, which unifies the treatment of different contact types and guarantees the existence of a solution for contacts with friction. At each timestep, the constraints and collisions are maintained by applying instantaneous changes in velocities due to constraint impulses. An excellent explanation of why impulse-based simulation is superior is contained in the GDC presentation of Catto 2014.
The frictionless contacts are modeled using a linear complementarity problem (LCP) as described in Baraff 1994. Friction is added as a non-linear projection onto the friction cone, interleaved with the iterations of the Projected Gauss-Seidel.
The numerical drift that introduces positional errors in the constraints is resolved using a post-stabilization technique using pseudo-velocities introduced by Cline-Pai 2003. It involves solving a second LCP in the position space, which projects the system back to the constraint manifold.
The LCPs are solved using a PGS / Impulse Solver popularized by Catto 2005 (also see Catto 2009). This method is iterative and considers each individual constraints in sequence and resolves it independently. Over many iterations, and in ideal conditions, the system converges to a global solution.
Additionally, high mass ratio issues in equality constraints are ironed out by preconditioning the PGS using the sparse LDL decomposition of the constraint matrix of equality constraints. Dense submatrices of the constraint matrix are sparsified using a method we call Body Splitting. This is similar to the LDL decomposition used in Baraff 1996, but allows more general mechanical systems, and solves the system in constraint space. For more information, you can see my GDC 2020 presentation.
The architecture of our solver follows the idea of Guendelman-Bridson-Fedkiw, where the velocity and position stepping are separated by the constraint resolution. Our time sequencing is:
  1. Advance velocities
  2. Constraint resolution in velocity space and position space
  3. Advance positions
This scheme has the advantage of integrating only valid velocities, and limiting latency in external force application but allowing a small amount of perceived constraint violation due to numerical drift.
An excellent reference for rigid body simulation is the book Erleben 2005 that was recently made freely available. You can find online lectures about physics-based animation, a blog by Nilson Souto on building a physics engine, a very good GDC presentation by Erin Catto on modern solver methods, and forums like the Bullet Physics Forum and GameDev which are excellent places to ask questions.

In Conclusion

The field of game physics simulation presents many interesting problems that are both exciting and challenging. There are opportunities to learn a substantial amount of cool mathematics and physics and to use modern optimizations techniques. It’s an area of game development that tightly marries mathematics, physics and software engineering.
Even if Roblox has a good rigid body physics engine, there are areas where it can be improved and optimized. Also, we are working on exciting new projects like fracturing, deformation, softbody, cloth, aerodynamics and water simulation.
Neither Roblox Corporation nor this blog endorses or supports any company or service. Also, no guarantees or promises are made regarding the accuracy, reliability or completeness of the information contained in this blog.
This blog post was originally published on the Roblox Tech Blog.
© 2020 Roblox Corporation. All Rights Reserved.

Using Clang to Minimize Global Variable Use

July

23, 2020

by RandomTruffle
PRODUCT & TECH
Every non-trivial program has at least some amount of global state, but too much can be a bad thing. In C++ (which constitutes close to 100% of Roblox’s engine code) this global state is initialized before main() and destroyed after returning from main(), and this happens in a mostly non-deterministic order. In addition to leading to confusing startup and shutdown semantics that are difficult to reason about (or change), it can also lead to severe instability.
Roblox code also creates a lot of long-running detached threads (threads which are never joined and just run until they decide to stop, which might be never). These two things together have a very serious negative interaction on shutdown, because long-running threads continue accessing the global state that is being destroyed. This can lead to elevated crash rates, test suite flakiness, and just general instability.
The first step to digging yourself out of a mess like this is to understand the extent of the problem, so in this post I’m going to talk about one technique you can use to gain visibility into your global startup flow. I’m also going to discuss how we are using this to improve stability across the entire Roblox game engine platform by decreasing our use of global variables.

Introducing -finstrument-functions

Nothing excites me more than learning about a new obscure compiler option that I’ve never had a use for before, so I was pretty happy when a colleague pointed me to this option in the Clang Command Line Reference. I’d never used it before, but it sounded very cool. The idea being that if we could get the compiler to tell us every time it entered and exited a function, we could filter this information through a symbolizer of some kind and generate a report of functions that a) occur before main(), and b) are the very first function in the call-stack (indicating it’s a global).
Unfortunately, the documentation basically just tells you that the option exists with no mention of how to use it or if it even actually does what it sounds like it does. There’s also two different options that sound similar to each other (-finstrument-functions and -finstrument-functions-after-inlining), and I still wasn’t entirely sure what the difference was. So I decided to throw up a quick sample on godbolt to see what happened, which you can see here. Note there are two assembly outputs for the same source listing. One uses the first option and the other uses the second option, and we can compare the assembly output to understand the differences. We can gather a few takeaways from this sample:
  1. The compiler is injecting calls to __cyg_profile_func_enter and __cyg_profile_func_exit inside of every function, inline or not.
  2. The only difference between the two options occurs at the call-site of an inline function.
  3. With -finstrument-functions, the instrumentation for the inlined function is inserted at the call-site, whereas with -finstrument-functions-after-inlining we only have instrumentation for the outer function. This means that when using-finstrument-functions-after-inlining you won’t be able to determine which functions are inlined and where.
Of course, this sounds exactly like what the documentation said it did, but sometimes you just need to look under the hood to convince yourself.
To put all of this another way, if we want to know about calls to inline functions in this trace we need to use -finstrument-functions because otherwise their instrumentation is silently removed by the compiler. Sadly, I was never able to get -finstrument-functions to work on a real example. I would always end up with linker errors deep in the Standard C++ Library which I was unable to figure out. My best guess is that inlining is often a heuristic, and this can somehow lead to subtle ODR (one-definition rule) violations when the optimizer makes different inlining decisions from different translation units. Luckily global constructors (which is what we care about) cannot possibly be inlined anyway, so this wasn’t a problem.
I suppose I should also mention that I still got tons of linker errors with -finstrument-functions-after-inlining as well, but I did figure those out. As best as I can tell, this option seems to imply –whole-archive linker semantics. Discussion of –whole-archive is outside the scope of this blog post, but suffice it to say that I fixed it by using linker groups (e.g. -Wl,–start-group and -Wl,–end-group) on the compiler command line. I was a bit surprised that we didn’t get these same linker errors without this option and still don’t totally understand why. If you happen to know why this option would change linker semantics, please let me know in the comments!

Implementing the Callback Hooks

If you’re astute, you may be wondering what in the world __cyg_profile_func_enter and __cyg_profile_func_exit are and why the program is even successfully linking in the first without giving undefined symbol reference errors, since the compiler is apparently trying to call some function we’ve never defined. Luckily, there are some options that allow us to see inside the linker’s algorithm so we can find out where it’s getting this symbol from to begin with. Specifically, -y should tell us how the linker is resolving . We’ll try it with a dummy program first and a symbol that we’ve defined ourselves, then we’ll try it with __cyg_profile_func_enter .
zturner@ubuntu:~/src/sandbox$ cat instr.cpp int main() {} zturner@ubuntu:~/src/sandbox$ clang++-9 -fuse-ld=lld -Wl,-y -Wl,main instr.cpp /usbin/../lib/gcc/x86_64-linux-gnu/crt1.o: reference to main /tmp/instr-5b6c60.o: definition of main
No surprises here. The C Runtime Library references main(), and our object file defines it. Now let’s see what happens with __cyg_profile_func_enter and -finstrument-functions-after-inlining.
zturner@ubuntu:~/src/sandbox$ clang++-9 -fuse-ld=lld -finstrument-functions-after-inlining -Wl,-y -Wl,__cyg_profile_func_enter instr.cpp /tmp/instr-8157b3.o: reference to __cyg_profile_func_enter /lib/x86_64-linux-gnu/libc.so.6: shared definition of __cyg_profile_func_enter
Now, we see that libc provides the definition, and our object file references it. Linking works a bit differently on Unix-y platforms than it does on Windows, but basically this means that if we define this function ourselves in our cpp file, the linker will just automatically prefer it over the shared library version. Working godbolt link without runtime output is here. So now you can kind of see where this is going, however there are still a couple of problems left to solve.
  1. We don’t want to do this for a full run of the program. We want to stop as soon as we reach main.
  2. We need a way to symbolize this trace.
The first problem is easy to solve. All we need to do is compare the address of the function being called to the address of main, and set a flag indicating we should stop tracing henceforth. (Note that taking the address of main is undefined behavior[1], but for our purposes it gets the job done, and we aren’t shipping this code, so ¯\_(ツ)_/¯). The second problem probably deserves a little more discussion though.

Symbolizing the Traces

In order to symbolize these traces, we need two things. First, we need to store the trace somewhere on persistent storage. We can’t expect to symbolize in real time with any kind of reasonable performance. You can write some C code to save the trace to some magic filename, or you can do what I did and just write it to stderr (this way you can pipe stderr to some file when you run it).
Second, and perhaps more importantly, for every address we need to write out the full path to the module the address belongs to. Your program loads many shared libraries, and in order to translate an address into a symbol, we have to know which shared library or executable the address actually belongs to. In addition, we have to be careful to write out the address of the symbol in the file on disk. When your program is running, the operating system could have loaded it anywhere in memory. And if we’re going to symbolize it after the fact we need to make sure we can still reference it after the information about where it was loaded in memory is lost. The linux function dladdr() gives us both pieces of information we need. A working godbolt sample with the exact implementation of our instrumentation hooks as they appear in our codebase can be found here.

Putting it All Together

Now that we have a file in this format saved on disk, all we need to do is symbolize the addresses. addr2line is one option, but I went with llvm-symbolizer as I find it more robust. I wrote a Python script to parse the file and symbolize each address, then print it in the same “visual” hierarchical format that the original output file is in. There are various options for filtering the resulting symbol list so that you can clean up the output to include only things that are interesting for your case. For example, I filtered out any globals that have boost:: in their name, because I can’t exactly go rewrite boost to not use global variables.
The script isn’t as simple as you would think, because simply crawling each line and symbolizing it would be unacceptably slow (when I tried this, it took over 2 hours before I finally killed the process). This is because the same address might appear thousands of times, and there’s no reason to run llvm-symbolizer against the same address multiple times. So there’s a lot of smarts in there to pre-process the address list and eliminate duplicates. I won’t discuss the implementation in more detail because it isn’t super interesting. But I’ll do even better and provide the source!
So after all of this, we can run any one of our internal targets to get the call tree, run it through the script, and then get output like this (actual output from a Roblox process, source file information removed):
excluded_symbols = [‘.\boost.*’]* excluded_modules = [‘/usr.\’]* /uslib/x86_64-linux-gnu/libLLVM-9.so.1: 140 unique addresses InterestingRobloxProcess: 38928 unique addresses /uslib/x86_64-linux-gnu/libstdc++.so.6: 1 unique addresses /uslib/x86_64-linux-gnu/libc++.so.1: 3 unique addresses Printing call tree with depth 2 for 29276 global variables. __cxx_global_var_init.5 (InterestingFile1.cpp:418:22) RBX::InterestingRobloxClass2::InterestingRobloxClass2() (InterestingFile2.cpp.:415:0) __cxx_global_var_init.19 (InterestingFile2.cpp:183:34) (anonymous namespace)::InterestingRobloxClass2::InterestingRobloxClass2() (InterestingFile2.cpp:171:0) __cxx_global_var_init.274 (InterestingFile3.cpp:2364:33) RBX::InterestingRobloxClass3::InterestingRobloxClass3()
So there you have it: the first half of the battle is over. I can run this script on every platform, compare results to understand what order our globals are actually initialized in in practice, then slowly migrate this code out of global initializers and into main where it can be deterministic and explicit.

Future Work

It occurred to me sometime after implementing this that we could make a general purpose profiling hook that exposed some public symbols (dllexport’ed if you speak Windows), and allowed a plugin module to hook into this dynamically. This plugin module could filter addresses using whatever arbitrary logic that it was interested in. One interesting use case I came up for this is that it could look up the debug information, check if the current address maps to the constructor of a function local static, and write out the address if so. This effectively allows us to gain a deeper understanding of the order in which our lazy statics are initialized. The possibilities are endless here.

Further Reading

If you’re interested in this kind of thing, I’ve collected a couple of my favorite references for this kind of topic.
  1. Various: The C++ Language Standard
  2. Matt Godbolt: The Bits Between the Bits: How We Get to main()
  3. Ryan O’Neill: Learning Linux Binary Analysis
  4. Linkers and Loaders: John R. Levine
  5. https://eel.is/c++draft/basic.exec#basic.start.main-3
Neither Roblox Corporation nor this blog endorses or supports any company or service. Also, no guarantees or promises are made regarding the accuracy, reliability or completeness of the information contained in this blog.
submitted by jaydenweez to u/jaydenweez [link] [comments]

Unkle Mike. Culling Of Invisible Objects In Quake Related Engines

Intro
Despite all these great achievements in video cards development and the sworn assurances of developers about drawing 2 to 3 million polygons on screen without a significant FPS drop, it’s not all that rosy in reality. It depends on methods of rendering, on the number of involved textures and on the complexity and number of involved shaders. So even if all this really does ultimately lead to high performance, it only happens in the demos that developers themselves kindly offer. In these demos, some "spherical dragons in vacuum" made of a good hundred thousand polygons are drawn very quickly indeed. However, the real ingame situation for some reason never looks like this funny dragon from a demo, and as a result many comrades abandon the development of their "Crysis killer" as soon as they can render a single room with a couple of light sources, because for some reason FPS in this room fluctuate around 40-60 even on their 8800GTS and upon creating second room it drops to a whopping 20. Of course with problems like this, it would be incorrect to say how things aren’t that bad and how the trouble of such developers are purely in their absence of correctly implemented culling, and how it is time for them to read this article. But for those who have already overcome “the first room syndrome" and tried to draw – inferior though, but, anyway - the world, this problem really is relevant.
However, it should be borne in mind that QUAKE, written in ancient times, was designed for levels of a “corridor" kind exclusively; therefore methods of clipping discussed in this article are not applicable to landscapes, such as ones from STALKER or Crysis, since completely different methods work there, whose analysis is beyond the scope of this article. Meanwhile we’ll talk about the classic corridor approach to mapping and the effective clipping of invisible surfaces, as well as clipping of entire objects.

The paper tree of baloon leaves

As you probably know, QUAKE uses BSP, Binary Spacing Partition tree. This is a space indexing algorithm, and BSP itself doesn’t care if the space is open or closed, it doesn’t even care if the map is sealed, it can be anything. BSP implies the division of a three-dimensional object into a certain number of secant planes called "the branches" or "the nodes" and volumetric areas or rooms called "the leaves". The names are confusing as you can see. In QUAKE / QUAKE2 the branches usually contain information about the surfaces that this branch contain, and the leaves are an empty space, not filled with nothing. Although sometimes leaves may contain water for example (in a form of a variable that indicates, specifically, that we’ve got water in this leaf). Also, the leaf contains a pointer to the data of potential visibility (Potentially Visible Set, PVS) and a list of all surfaces that are marked as being visible from this leaf. Actually the approach itself implies that we are able to draw our world however we prefer, either using leaves only or using branches only. This is especially noticeable in different versions of QUAKE: for example, in QUAKE1 in a leaf we just mark our surfaces as visible and then we also sequentially go through all the surfaces visible from a particular branch, assembling chains of surfaces to draw them later. But in QUAKE3, we can accumulate visible surfaces no sooner than we’ll get into the leaf itself.
In QUAKE and QUAKE2, all surfaces must lie on the node, which is why the BSP tree grows rather quickly, but in exchange this makes it possible to trace these surfaces by simply moving around the tree, not wasting time to check each surface separately, which affects the speed of the tracer positively. Because of this, unique surface is linked to each node (the original surface is divided into several if necessary) so in the nodes we always have what is known to be visible beforehand, and therefore we can perform a recursive search on the tree using the BBox pyramid of frustum as a direction of our movement along the BSP tree (SV_RecursiveWorldNode function).
In QUAKE3, the tree was simplified and it tries to avoid geometry cuts as much as possible (a BSP tree is not even obliged to cut geometry, such cuts are but a matter of optimality of such a tree). And surfaces in QUAKE3 do not lie on the node because patches and triangle models lie there instead. But what happens would they be put on the node nevertheless, you can see on the example of "The Edge Of Forever" map that I compiled recently for an experimental version of Xash. Turns out, in places that had a couple thousand visible nodes and leaves in the original, there are almost 170 thousand of them with a new tree. And this is the result after all the preliminary optimizations, otherwise it could have been even more, he-he. Yeah, so... For this reason, the tree in QUAKE3 does not put anything on the node and we certainly do need to get into the leaf, mark visible surfaces in it and add them to the rendering list. On the contrary, in QUAKE / QUAKE2 going deep down to the leaf itself is not necessary.
Invisible polygon cutoff (we are talking about world polys, separate game objects will be discussed a bit later) is based on two methods:
The first method is to use bit-vectors of visibility (so-called PVS - Potential Visible Set). The second method is regular frustum culling which actually got nothing to do with BSP but works just as efficiently, for a certain number of conditions of course. Bottom line: together these two methods provide almost perfect clipping of invisible polygons, drawing a very small visible piece out of the vast world. Let's take a closer look at PVS and how it works.

When FIDO users get drunk

Underlying idea of PVS is to expose the fact that one leaf is visible from another. For BSP alone it’s basically impossible because leaves from completely different branches can be visible at the same time and you will never find a way to identify the pattern for leafs from different branches seeing each other - it simply doesn’t exist. Therefore, the compiler has to puff for us, manually checking the visibility of all leaves from all leaves. Information about visibility in this case is scanty: one Boolean variable with possible values 0 and 1. 0 means that leaf is not visible and 1 means that leaf is visible. It is easy to guess that for each leaf there is a unique set of such Boolean variables the size of the total number of leaves on the map. So a set like this but for all the leaves will take an order of magnitude more space: the number of leaves multiplied by the number of leaves and multiplied by the size of our variable in which we will store information of visibility (0 \ 1).
And the number of leaves, as you can easily guess, is determined by map size map and by the compiler, which upon reaching a certain map size, cease to divide the world into leaves and treat resulting node as a leaf. Leaf size vary for different QUAKE. For example, in QUAKE1 leaves are very small. For example I can tell you that the compiler divide standard boxmap in QUAKE1 into as many as four leaves meanwhile in QUAKE3 similar boxmap takes only one leaf. But we digress.
Let's estimate the size of our future PVS file. Suppose we have an average map and it has a couple thousand leaves. Would we imagine that the information about the leaf visibility is stored in a variable of char type (1 byte) then the size of visdata for this level would be, no more no less, almost 4 megabytes. That is, much AF. Of course an average modern developer would shrug and pack the final result into zip archive but back in 1995 end users had modest machines, their memory was low and therefore visdata was packed in “more different” ways. The first step in optimizing is about storing data not in bytes, but in bits. It is easy to guess that such approach reduce final result as much as 8 times and what's typical AF – does it without any resource-intensive algorithms like Huffman trees. Although in exchange, such approach somewhat worsened code usability and readability. Why am I writing this? Due to many developers’ lack of understanding for conditions in code like this:
if ( pvs [ leafnum >> 3 ] & ( 1 << ( leafnum & 7 ) ) ) { } 
Actually, this condition implement simple, beautiful and elegant access to the desired bit in the array (as one can recall, addressing less than one byte is impossible and you can only work with them via bit operations)

Titans that keep the globe spinning

The visible part of the world is cut off in the same fashion: we find the current leaf where the player is located (in QUAKE this is implemented by the Mod_PointInLeaf function) then we get a pointer to visdata for the current leaf (for our convenience, it is linked directly to the leaf in the form of "compressed_vis" pointer) and then stupidly go through all the leaves and branches of the map and check them for being visible from our leaf (this can be seen in the R_MarkLeaves function). As long as some leaves turn out to be visible from the current leaf we assign them a unique number from "r_visframecount" sequence which increases by one every frame. Thus, we emphasize that this leaf is visible when we build the current frame. In the next frame, "r_framecount" is incremented by one and all the leaves are considered invisible again. As one can understand, this is much more convenient and much faster than revisiting all the leaves at the end of each frame and zeroing their "visible" variable. I drew attention to this feature because this mechanism also bothers some and they don’t understand how it works.
The R_RecursiveWorldNode function “walk” along leaves and branches marked this way. It cuts off obviously invisible leaves and accumulate a list of surfaces from visible ones. Of course the first check is done for the equivalence of r_visframecount and visframe for the node in question. Then the branch undergoes frustum pyramid check and if this check fails then we don’t climb further along this branch. Having stumbled upon a leaf, we mark all its surfaces visible the same way, assigning the current r_framecount value to the visframe variable (in the future this will help us to determine quickly whether a certain surface is visible in the current frame). Then, using a simple function, we determine which side we are from the plane of our branch (each branch has its own plane, literally called “plane” in the code) and, again, for now, we just take all surfaces linked to this branch and add them to the drawing chain (so-called “texturechain”), although nobody can actually stop us from drawing them immediately, right there, (in QUAKE1 source code one can see both options) having previously checked these surfaces for clipping with the frustum pyramid, or at least having made sure that the surface faces us.
In QUAKE, each surface has a special flag SURF_PLANEBACK which help us determine the orientation of the surface. But in QUAKE3 there is no such flag anymore, and clipping of invisible surfaces is not as efficient, sending twice as many surfaces for rendering. However, their total number after performing all the checks is not that great. However, whatever one may say, adding this check to Xash3D raised average FPS almost one and half times in comparison to original Half-Life. This is on the matter whether it is beneficial. But we digress.
So after chaining and drawing visible surfaces, we call R_RecursiveWorldNode again but now - for the second of two root branches of BSP tree. Just in case. Because the visible surfaces, too, may well be there. When the recursion ends, the result will either be a whole rendered world, or chains of visible surfaces at least. This is what can actually be sent for rendering with OpenGL or Direct3D, well, if we did not draw our world right in the R_RecursiveWorldNode function of course. Actually this method with minor upgrades successfully used in all three QUAKEs.

A naked man is in a wardrobe because he's waiting for a tram

One of the upgrades is utilization of the so-called areaportals. This is another optimization method coming straight out of QUAKE2. The point of using areaportals is about game logic being able to turn the visibility of an entire sectors on and off at its discretion. Technically, this is achieved as follows: the world is divided into zones similar to the usual partitioning along the BSP tree, however, there can’t be more than 256 of them (later I will explain why) and they are not connected in any way.
Regular visibility is determined just like in QUAKE; however, by installing a special “func_areaportal” entity we can force the compiler to split an area in two. This mechanism operates on approximately the same principle as the algorithm of searching for holes in the map, so you won’t deceive the compiler by putting func_areaportal in a bare field - the compiler will simply ignore it. Although if you make areaportal the size of the cross-section of this field (to the skybox in all directions) in spite of everything the zones will be divided. We can observe this technique in Half-Life 2 where an attempt to return to old places (with cheats for example) shows us disconnected areaportals and a brief transition through the void from one zone to another. Actually, this mechanism helped Half-Life 2 simulate large spaces successfully and still use BSP level structure (I have already said that BSP, its visibility check algorithm to be precise, is not very suitable for open spaces).
So installed areaportal forcibly breaks one zone into two, and the rest of the zoneization is at the discretion of the compiler, which at the same time makes sure not to exceed 256 zones limit, so their sizes can be completely different. Well, I repeat, it depends on the overall size of the map. Our areaportal is connected to some door dividing these two zones. When the door is closed - it turns areaportal off and the zones are separated from each other. Therefore, if the player is not in the cut off zone, then rendering it is not worth it. In QUAKE, we’d have to do a bunch of checks and it’s possible that we could only cut off a fraction of the number of polygons (after all, the door itself is not an obstacle for either visibility check, or even more so, nor it is for frustum). Compare to case in point: one command is issued - and the whole room is excluded from visibility. “Not bad,” you’d say, “but how would the renderer find out? After all, we performed all our operations on the server and the client does not know anything about it.” And here we go back to the question why there can’t be more than 256 zones.
The point is, information about all of zone visibility is, likewise, packaged in bit flags (like PVS) and transmitted to the client in a network message. Dividing 256 bits by 8 makes 32 bytes, which generally isn’t that much. In addition, the tail of this information can be cut off at ease if it contains zeroes only. Though the payback for such an optimization would appear as an extra byte that will have to be transmitted over the network to indicate the actual size of the message about the visibility of our zones. But, in general, this approach justified.

Light_environment traces enter from the back

Source Engine turned out to have a terrible bug which makes the whole areaportal thing nearly meaningless. Numerous problems arise because of it: water breaks down into segments that pop in, well, you should be familiar with all this by now. Areaportal cuts the geometry unpredictably, like an ordinary secant plane, but its whole point is being predictable! Whereas areaportal brushes in Source Engine have absolutely no priority in splitting the map. It should be like this: first, the tree is cut the regular way. And when no suitable planes left, the final secant plane of areaportal is used. This is the only way to cut the sectors correctly.

Modern problems

The second optimization method, as I said, is increased size of the final leaf akin to QUAKE3. It is believed that a video card would draw a certain amount of polygons much faster than the CPU would check whether they are visible. This come from the very concept of visibility check: if visibility check takes longer than direct rendering, then well, to hell with this check. The controversy of this approach is determined by a wide range of video cards present at the hands of the end users, and it is strongly determined by the surging fashion for laptops and netbooks in which a video card is a very conditional and very weak concept (don’t even consider its claimed Shader Model 3 support). Therefore, for desktop gaming machines it would be more efficient to draw more at a time, but for weak video cards of laptops traditional culling will remain more reliable. Even if it is such a simple culling as I described earlier.

Decompression sickness simulator

Although I should also mention the principles of frustum culling, perhaps they are incomprehensible to some. Cutoff by frustum pyramid is actually pure mathematics without any compiler calculations. From the current direction of the player’s gaze, a clipping pyramid is built (the tip of the pyramid – in case someone can’t understand - is oriented towards the player’s point of view and its base is oriented in the direction of player’s view). The angle between the walls of the pyramid can be sharp or blunt - as you probably guessed already, it depends on the player's FOV. In addition, the player can forcefully pull the far wall of the pyramid closer to himself (yes, this is the notorious “MaxRange” parameter in the “worldspawn” menu of the map editor). Of course, OpenGL also builds a similar pyramid for its internal needs when it takes information from the projection matrix but we’re talking local pyramid now. The finished pyramid consists of 4-6 planes (QUAKE uses only 4 planes and trusts OpenGL to independently cut far and near polygons, but if you write your own renderer and intend to support mirrors and portals you will definitely need all six planes). Well, the frustum test itself is an elementary check for a presence of AA-box (AABB, Axis Aligned Bounding Box) in the frustum pyramid. Or speaking more correctly, this is a check for their intersection. Let me remind you that each branch has its own dimensions (a fragment of secant plane bound by neighboring perpendicular secant planes) which are checked for intersection. But unfortunately the frustum test has one fundamental drawback - it cannot cut what is directly in the player’s view. We can adjust the cutoff distance, we can even make that “ear feint” like they do in QFusion where final zFar value is calculated in each frame before rendering and then taken into account in entity clipping, but after all, whatever they say, the value itself was obtained from PVS-information. Therefore, neither of two methods can replace the other but they just complement each other. This should be remembered.

I gotta lay off the pills I'm taking

It seems that we figured out the rendering of the world and now we are moving on smoothly to cutting off moving objects... which are all the visible objects in the world! Even ones that, at te first glance, stand still and aren’t planning to move anywhere. Cause the player moves! From one point he still sees a certain static object, and from another point, of course, he no longer does. This detail should also be considered.
Actually, at the beginning of this article I already spoke in detail about an algorithm of objects’ visibility check: first we find the visible leaf for the player, then we find the visible leaf for the entity and then we check by visdata whether they see each other. I, too, would like to clarify (if someone suddenly does not understand) how each moving entity is given the number of its current visible leaf, i.e. directly for entity’s its own current position, and the leaves themselves are of course static and always in the same place.

Ostrich is such an OP problem solver

So the method described above has two potential problems:
The first problem is that even if A equals B, then, oddly enough, B is far from being always equal A. In other words, entity A can see entity B, but this does not mean that entity B see entity A, and, no, it’s not about one of them “looking” away. So why is this happening? Most often for two reasons:
The first reason is that one of the entities’ ORIGIN sit tight inside the wall and the Mod_PointInLeaf function for it points to the outer “zero” leaf from which EVERYTHING is visible (haven’t any of you ever flown around the map?). Meanwhile, no leaf inside the map can see outer leaf - these two features actually explain an interesting fact of an entire world geometry becoming visible and on the contrary, all objects disappearing when you fly outside the map. In regular mode, similar problems can occur for objects attached to the wall or recessed into the wall. For example, sometimes the sounds of a pressed button or opening door disappear because its current position went beyond the world borders. This phenomenon is fought by interchanging objects A and B or by obtaining alternative points for the position of an object, but all the same, it’s all not very reliable.

But lawyer said that you don't exist

In addition, as I said, there is another problem. It come from the fact that not every entity fits a single leaf. Only the player is so small that he can always be found in one leaf only (well, in the most extreme case - in two leaves on the border of water and air. This phenomenon is fought with various hacks btw), but some giant hentacle or on the contrary, an elevator made as a door entity, can easily occupy 30-40 leaves at a time. An attempt to check one leaf (for example, one where the center of the model is) will inevitably lead to a deplorable result: as soon as the center of an object will be out of the player’s visibility range, the entire object will disappear completely. The most common case is the notorious func_door used as an elevator. There is one in QUAKE on the E1M1. Observe: it travels halfway and then its ORIGIN is outside the map and therefore it must disappear from the player’s field of view. However, it does not go anywhere, right? Let us see in greater detail how this is done.
The simplest idea that comes to one’s mind: since the object occupies several leaves, we have to save them all somewhere in the structure of an object in the code and check them one by one. If at least one of these leaves is visible, then the whole object is visible (for example, it’s very tip). This is exactly what was implemented in QUAKE: a static array for 16 leaves and a simple recursive function SV_FindTouchedLeafs that looks for all the leaves in range hardcoded in "pev->absmins" and "pev->absmax" variables (pev i.e. a Pointer to EntVars_t table). absmins and absmax are recalculated each time SV_LinkEdict (or its more specific case of UTIL_SetOrigin) is called. Hence the quite logical conclusion that a simple change of ORIGIN without recalculating its visible leaf will take the object out of visibility sooner or later even if, surprisingly enough, it’s right in front of the player and the player should technically still be able to see it. Inb4 why one have to call UTIL_SetOrigin and wouldn’t it be easier to just assign new value to the "pev->origin" vector without calling this function. It wouldn’t.
With this method we can solve both former problems perfectly: we can fight the loss of visibility if the object's ORIGIN went beyond the world borders and level the difference of visibility for A->B versus visibility for B->A.

A secret life of monster_tripmine

Actually we’ve yet to encounter another problem, but it does not occur immediately. Remember, we’ve got an array of 16 leaves. But what if it won’t be enough? Thank God there are no beams in QUAKE and no very long elevators made as func_door either. For this exact reason. Because when the array is filled to capacity, the SV_FindTouchedLeafs function just stop and we can only hope that there won’t be that many cases when an object disappear right before our eyes. But in the original QUAKE, such cases may well be. In Half-Life, the situation is even worse - as you can remember there are rays that can reach for half the map, tripmine rays for example. In this case, a situation may occur when we see just the very tip of the ray. For most of these rays, 16 leaves are clearly not enough. Valve tried to remedy the situation by increasing the array to 48 leaves. That helped. On early maps. If you remember, at the very beginning of the game when the player has already got off the trailer, he enters that epic elevator that takes him down. The elevator is made as a door entity and it occupies 48 leaves exactly. Apparently, the final expansion of the array was based after its dimensions. Then the programmers realized that this isn’t really a solution, because no matter how much one would expand the array, it can still be lacking for something. So then they screwed up an alternative method for visibility check: a head branch (headnode) check. In short, this is still the same SV_FindTouchedLeafs but now it is called directly from the place of visibility check and with a subsequent transfer of visdata in there. In general, it is not used very often because it is slower than checking pre-accumulated leaves, that is, it is intended just for such non-standard cases like this one.
Well, and since, I hope, general picture of the clipping mechanism already beginning to take shape in your mind, I will finish the article in just a few words.
On the server, all objects that have already passed the visibility check are added to the network message containing information about visible objects. Thus, on the client, the list of visible entities is already cut off by PVS and we do not have to do this again and therefore a simple frustum check is enough. You ask, "why did we have to cut off invisible objects on the server when we could do this later when we are on the client already?" I reply: yes, we could, but now the objects cut off on the server didn’t get into the network message and saved us some traffic. And since the player still does not see them, what is the point of transferring them to the client just to check them for visibility after? This is a kind of double optimizing :)
© Uncle Mike 2012
submitted by crystallize1 to HalfLife [link] [comments]

60 seconds binary options strategy winning 22 out of 24 ... how I trade binary options 60 seconds strategy 100 percent ... 60 Seconds binary options strategy 99 - 100% Winning (100% ... Binary Options 60 Seconds Indicator 99% Winning Live ... 60 Seconds Binary Options Indicator - YouTube 2019 binary option 60 seconds indicator & strategy Binary Options 60 Seconds Indicator %100 Winning Trades ... 60 seconds binary options indicators & strategy I made $22 000 Live on video-100% profit guaranteed 2019 Best IQ Option 60 Second Binary option Spider ... binary options 60 seconds indicator - YouTube

That is a fraudulent indicator for the MetaTrader 4 decide. You will need to be aware of which asset you are looking to trade (for example, a stock, currency, commodity or index) and the expected price direction (either increasing or decreasing in value). Trading 60 seconds binary options provides the opportunity for traders to make substantially larger profits that using the same timeframe ... The only thing I liked about this indicator is that it signals you before the upcoming trend or we can say before the upcoming opportunity. I usually work on M1 chart. So I've tested it on M1 chart only. I don't know about the other charts. It's just because i like trading Binary Options 60 Seconds. Many user have claimed it works on other time ... Submit by MikeTrader 06/01/2014 60 second Binary Options strategy high/low is trend following. 60 Second Binary Options Indicator requires MetaTrader 4 to function. Date septembre, 02nd, 2020. Binary Options the best 60 second binary options strategy With Flag Candle Indicator. 3. This is the the best 60 second binary options strategy best spread of the $100 when it come to feminist of the multiple beliefs we are too online of the absent maturity …. 60 seconds binary options strategy is a trend momentum ... → Binary Options Strategies → 60 Second Strategies Next High Impact Market ... I usually enter with 3 seconds or less remaining. I would say when trading this strategy for the first few days only enter trades where the signalling candle has the SMA going through it, even if the SMA only goes through one corner, since it may be a strong up/downtrend where fake signals will be created, the ... 60 second binary options indicator (ADX 21 periods). In forex a trading strategy is a fixed plan that is designed to achieve a profitable return by going long or short in markets. The main reasons that a properly researched trading strategy helps are its verifiability, quantifiability, consistency, and objectivity. Opções Binárias Trading. Investing em opções binárias pode ser uma experiência rentável A chave para lucrar em opções de negociação binário... Not really a solitary investor that down loaded the program could allow it to be function. This enables you to question when they didn’t deliberately produce a phony, non-working software program in order to mistake investors in to thinking some thing is really incorrect on the aspect, using their personal pc. No! Your pc is simply good! The actual Revenue Within sixty Seconds is actually ... This indicator shows a function’s average on a certain period previous to each given point. The plotting period (the number of time series taken for the average) is chosen by a trader depending on the tool used and the particular market situation. It is important to know that the bigger period you take, the smoother average you will get, and the slower it will react to the price changes. And ... Legit binary option sites. 60 Seconds Strategy Binary Options Binary options of 60 seconds are options for which the completion of the contract (expiration) is trading 60 second binary options 1 minute Jun 24, 2020 · Strategy for binary options are divided by expiration dates, i.e., by the time when the option expires and trader sees his income gain or loss.

[index] [4216] [16762] [212] [22607] [24454] [4583] [20717] [17042] [5491] [23824]

60 seconds binary options strategy winning 22 out of 24 ...

In this video I am going to show you my 60 seconds binary options strategy which is 90 to 100% accuracy and 100% profit guaranteed. I am doing binary options... 60 seconds binary options strategy winning 22 out of 24 trades-100% profit guaranteed - Duration: 26:48. ... AWESOME INDICATOR Best IQ Option Strategy 🏆 - Duration: 10:45. BinaryOptionsGuy.com ... Spider Strategy World Best IQ strategy ** Spider Strategy ** 60-second binary option Spider strategy 2019 indicator spider Strategy indicator TO get this str... Fixed Time trading: Rute tercepat menuju dunia trading. Raih sukses trading setiap hari. Raih penghasilan dari fluktuasi nilai tukar dolar. *****... 60 seconds binary options strategy winning 22 out of 24 trades-100% profit guaranteed - Duration: 26 ... Super Dot Indicator Attach With MT4 For Binary Option And Live Trading - Duration: 10:07 ... how I trade binary options 60 seconds strategy with complete 100% profit guaranteed. Please watch this video to the end. Since this is just a short video to ... Hi Friends I will Show This Video Binary Options 60 Seconds Indicator Signal 99% Winning Live Trading Proof -----... 60 Seconds binary options strategy 99 - 100% Winning (100% profit guaranteed) 90 - 95% Winning Binary Options Strategy in case of correct prediction - 1 to 5... OLYMP TRADE broker account opening link below: https://goo.gl/urftNR this video contains two trading examples with explanation. watch and learn how to trade ... This 60 Seconds Binary Options Indicator trading system has all you need to earn steady income. Get started earning today!: http://binaryoptionsindicatorsign...

http://binary-optiontrade.civarisoun.cf