Visit Killerbinaryoptionssecret.com - BINARY OPTIONS ...

option trading secrets - binary options secret and 98% accuracy with a killer strategy

option trading secrets - binary options secret and 98% accuracy with a killer strategy submitted by TopVideosCasino to u/TopVideosCasino [link] [comments]

option trading secrets - binary options secret and 98% accuracy with a killer strategy

option trading secrets - binary options secret and 98% accuracy with a killer strategy submitted by TopVideosCasino to u/TopVideosCasino [link] [comments]

option trading secrets - binary options secret and 98% accuracy with a killer strategy

option trading secrets - binary options secret and 98% accuracy with a killer strategy submitted by TopVideosCasino to u/TopVideosCasino [link] [comments]

option trading secrets - binary options secret and 98% accuracy with a killer strategy

option trading secrets - binary options secret and 98% accuracy with a killer strategy submitted by TopVideosCasino to u/TopVideosCasino [link] [comments]

option trading secrets - binary options secret and 98% accuracy with a killer strategy

option trading secrets - binary options secret and 98% accuracy with a killer strategy submitted by TopVideosCasino to u/TopVideosCasino [link] [comments]

option trading secrets - binary options secret and 98% accuracy with a killer strategy

option trading secrets - binary options secret and 98% accuracy with a killer strategy submitted by TopVideosCasino to u/TopVideosCasino [link] [comments]

option trading secrets - binary options secret and 98% accuracy with a killer strategy

option trading secrets - binary options secret and 98% accuracy with a killer strategy submitted by TopVideosCasino to u/TopVideosCasino [link] [comments]

option trading secrets - binary options secret and 98% accuracy with a killer strategy

option trading secrets - binary options secret and 98% accuracy with a killer strategy submitted by TopVideosCasino to u/TopVideosCasino [link] [comments]

option trading secrets - binary options secret and 98% accuracy with a killer strategy

option trading secrets - binary options secret and 98% accuracy with a killer strategy submitted by TopVideosCasino to u/TopVideosCasino [link] [comments]

Sympathy for the Drow - De-Vilifying the Dark Elves

The "Evil" races in DnD have always rubbed me kinda the wrong way. Partly once I learned that a lot of them come from racist stereotypes (Orcs, Drow, and Goblins in particular) and also just because it doesn't make sense to me. Even Nazi Germany had variation and dissenters and it only lasted for 12 years. Why would a clearly evil society never change over hundreds of years? In my opinion, a story is only as good as it's villains. So, I've set out to try and make the traditionally evil races slightly more believable and even sympathetic in places.
Now, I've not been a DM very long, only like three years. But the first campaign I ever ran was through Curse of Strahd which paints the Vistani (an itinerant society heavily based on the real world Romani) as a conniving group of thieves, murders, and vampire-worshipers. Thankfully, I found through reddit and other sites how to steer away from the racists depictions of the Vistani and making them seem like, at worst, opportunists. So, I hope to be able to do that with some other of the classic DnD antagonist races.
I've read some other phenomenal post on here about evil races that totally inspired me as well. There's a great two part post about Decolonizing D&D which I adore. The post about alignment is easily my favorite. There's a couple great ones on Orcs and Yuan-Ti too so if some of my ideas are lifted from them, I hope y'all consider it flattery instead of theft. So, here are some primer notes before I get into it.
For creating the Dark Elves, I tried to keep as much as I could from the books. Obviously some stuff has to get thrown out the window though. I also tried to standardize calling them Dark Elves instead of Drow partly because I feel like Drow has a much nastier sound to it and calling them Dark Elves follows the naming convention with the High and Wood Elves. I tried to model them after real-life matriarchal societies like the Mosuo people of China and their pantheon after real deities like the Greeks, Romans, and Norse. I also quickly realized that building a society is inseparable from geography. Where a people are from effects their language, values, mythology, history, and family structure. I've tried to outline details I think are necessary to making this society realistic while leaving it open ended enough to be place-able in different worlds with relative ease. All that aside, lets get into the meat of it.

The Dark Elves: Elven Outcasts

The Elves are a varied and magical people that come from many planes and many environments within them. But none are met with more distrust and fear than the Dark Elves. Easily set apart from their cousins by their charcoal or pitch-black skin, pink-red eyes, hair of grays and whites, and shorter stature, these people have earned a reputation as killers, thieves, demon worshipers, and liars. But history is a cruel mistress, something the Dark Elves know better than most.

The Divine Divide

As the legends go, when the world was still young, Corellon Larethian lived on the Plane of Arvandor with his fellow Primal Elves. They were wild and mutable, emotional and free in all things. They changed shapes at will, gave and took freely to and from the world, and never stayed in any location too long. They wandered to and fro, scattering their peoples across almost every plane. However, this unbridled freedom was not without a price. Arguments, feuds, and small scale wars were incredibly common between them. Some elves would find themselves stranded on far off planes after most of their companions impulsively decided to leave. Their self serving impulses drove them to often completely disregard the needs or wants of others if they went against their own desires. And their reckless revelry was wreaking havoc on the natural world with Elven parties decimating whole planes of edible plants, wild game, and drinkable water.
One such Primal Elf began to see the destruction of their ways and talked to other elves about their actions. Slowly, this Elf by the name of Lolth amassed a small following of devotees that saw the negative ramifications of their inconsiderate freedom. Lolth and her followers agreed to take on fixed forms to show recognition of the dangers that impulsivity could bring. Lolth led this small group of devotees to Corellon to ask for his support. Now, Corellon did not lead these Primal Elves: he was just as wild as the best of them and did not take kindly to others telling him what to do. But he was the First Elf ever born and was universally respected amongst the Primal Elves and if Lolth could convince him, others would surely follow. Corellon listened to her proposition and agreed that they should change to prevent more destruction and conflict, but refused to order his kinsfolk into any action. He was an Elf, same as all of them, and he wouldn’t dare order around his family. He balked when Lolth asked him to take a concrete form as a show of solidarity and brushed her off as a killjoy.
Lolth was unsatisfied with this outcome and her following set out to convince each Elf to change their ways to preserve the beauty of the worlds. However, without the support of Corellon, many elves refused her offer. Her anger grew with each failure and her opinion of Corellon turned sour, something she made no attempt to hide from her Elven siblings. Now, Corellon is a proud god and once he caught wind that Lolth was bad mouthing him in an attempt to win over others, he became enraged. He railed against Lolth calling her a snake-tongued thief and Lolth called him incompetent and cruel. Their tempers flared and all the elves chose sides between Corellon’s freedom and Lolth’s stability. During this great debate, the Primal Elves turned to violence. The Dark Elves maintain that Corellon’s side threw the first blow, while the High Elves claim that it came from Lolth’s side.
No matter the source, this violent outburst soured relations between Lolth and Corellon forever after. He cast her and her followers out of Arvandor and barred her from ever returning. He also cast all but his most trusted kin from Arvandor, forcing them all to live lives on other worlds out of fear of another perceived insurrection. Thus, the Seldarine remain in Arvandor to judge the souls of Corellon’s faithful when they die and Lolth takes refuge in Arcadia with her pantheon where she minds the souls of the Drow. Corellon’s faithful call her pantheon the Dark Seldarine, while her faithful call it the Myrkalfar.

Myrkalfar: The Spider Mother’s House

Lolth the Spider Queen is the unquestioned head of the Myrkalfar, with all other deities seen as her divine family. Lolth is considered at times to be fickle or even cruel, but her ire is never gained without good reason. A very involved deity, her followers constantly search for signs of her favor or scorn in everyday life. When a Dark Elf contemplates a risky or controversial decision, they consult priestesses or perform their own rites which often gives them direct and succinct answers. She serves as an example to matriarchs of Drow families as demanding yet understanding, punishing yet guiding. She asks for a lot of her priestesses, demanding they be an unflinching example of everything a strong leader should be. The Myrkalfar is often presented as a divine household, with Lolth as the matron.
Keptolo is the consort of Lolth and considered to be the ideal of what a male should be. Beautiful and kind, strong and hard working, he helps Lolth in everything she does. Sometimes he serves as a messenger, other times as an agent of redemption, sometimes as a divine healer. When a Dark Elf is tasked with a divine charge, he is usually the one to deliver the message and guide them through their charge. He serves also as a fertility deity and is often worshiped by women or men seeking a child. Outsiders see him as a weak and subservient husband to Lolth, but his faithfulness to his matron is considered a virtue and his status as a “husband” is relatively alien to the Dark Elves as they have no binding marriage in their society.
If Keptolo is the agent of Lolth’s mercy, Kiaransalee is the agent of her vengeance. She is the eldest daughter of Lolth and Keptolo and one that Dark Elves pray to when they feel wronged. Only the most binding and serious contracts are signed under her name. To break an oath made under her name is sure to bring destruction. She is also the governor of the dead, judging the souls of those passed in the afterlife. She opposes the mindless undead created by mortals, but spirits and revenants that return to finish unresolved business amongst the living are considered under her protection. Should a Dark Elf encounter a returned spirit that is seeking vengeance, it’s their duty to leave them on their way and pray that the spirit isn’t there for them. This reverence of certain undead is something many outsiders consider downright evil.
Selvetarm is the Dark Elven warrior goddess and youngest daughter of Lolth. Often depicted with eight arms, she represents the pinnacle of hand to hand martial prowess, but often is without restraint. She serves as both an inspiration for warriors, and a warning. Vhaeraun is the eldest son of Lolth and governs ambition and stealth. Both of these traits are not necessarily vilified, but worship of him is highly scrutinized. Haughty and rash, tales of him often include deceiving his fellow gods for good and ill and more often than not are cautionary ones. He’s depicted as wearing a mask, either as some punishment for endangering Lolth and her family or to hide his identity for various schemes, possibly both.
Malyk is Lolth’s youngest son and a youthful deity of change and growth. He’s often seen as a bouncing young boy that Lolth and her family have to reign in from wild misadventures. His freedom and curiosity is often seen as a double edged sword, both gaining him great riches but also putting him in tremendous peril. He has strong ties to sorcerers and when a child is born with innate magical talent, he is often the one thanked for it. He serves as an outlet for a Dark Elves youthful chaotic nature, but also warns them of the ramifications of their actions.
Ghaunadur is a strange figure in the pantheon. Their place in the family is a bit of a mystery, sometimes called the sibling of Lolth, or her child, or even as Lolth’s parent. What makes them truly unique is that they are a formless deity, something that Lolth once warred with Corellon over. The legends go that when Ghaunadur joined Lolth, they refused to give up their changeable nature. When questioned, Ghaunadur pointed to the slimes, oozes, and formless creatures of the world and said that they wished to protect them from the Elves and the Elves from them. Lolth agreed, cementing their position as the deity of the changing forms of nature. Their favored creature is the ooze, but they govern all natural creatures. Dark Elves often pray to Ghaunadur to protect them from the creatures that lurk in the depths of the forest.
Zinzerena is Lolth’s sister and is the goddess of poisons, illusions, and magic. Viewed as an elderly and patient figure, she often serves as council to Lolth in desperate times. She’s said to be the mother of all poisons and venoms and her teachings are all about finding the wisest solution to a problem. Zinzerena teaches that even though the spider is small, it’s bite can still fell a panther. Despite her perceived age, she’s considered the younger sister of Lolth and is thought to be incredibly quick and nimble: a reminder that not everything is as it seems.
Eilistraee is Lolth’s niece and daughter of Zinzerena. Considered the black sheep of the pantheon, she serves as a goddess of redemption and moonlight. Dark Elves that turn their back on their family or scorn traditions will sometimes find themselves turned to Driders, half-spider half-Dark Elf creatures shunned by all. Eilistraee is said to watch over these creatures and if they are repentant, offer them challenges that they could complete to redeem themselves. Lolth often views her with contempt or mistrust, but never hates her and maintains her place in the pantheon. Dark Elven faithful rarely worship her as the others. She’s also one of the only deities of the Myrkalfar to claim no animosity toward the Seldarine and their faithful.
Spiders are the sacred animal of Lolth and are often used as an example of social order and the importance of family bonds. Each strand of silk serves the web as whole. More literally, the giant spiders of the Underdark are multifaceted and incredibly useful creatures. Serving as beasts of burden, war steeds, meat producers, household guardians, and silk producers, they are present in almost every facet of society. Their silks are used in everything from wound dressings to armor to architecture. To kill or steal another family's spider is considered akin to stealing a member of the family. Smaller and more poisonous spiders are often kept in temples and their webs are used as divining tools for priestesses.

Elven Exiles

The recorded history of the Dark Elves is full of contradictions from High Elf and Dark Elf sources. What historians can agree on is when the Elves of the Prime Material arrived, the followers of Lolth secluded from their Wood and High cousins and retreated into the Azelarien, also known as the Green Sea in Common. A massive forest, nearly 1 million square miles of dense and vibrant trees, that grows denser and darker the farther in one ventures. For countless eons, the High, Wood, and Dark Elves lived in relative harmony in their own corner of the world. High Elves lived near the forests in towns and villages, the Wood Elves lived in the lightly forested outlands of the Green Sea, and the Dark Elves lived deep in the central forests which was so dense that very little light reached the forest floor.
As time passed and their villages turned to cities, the High Elves began expanding into the forest, chopping some down to build homes and heat their furnaces. This began pushing into the territory of the Wood Elves and eventually the Dark Elves as well. These two peoples formed a shaky alliance to push back the expansive tide of the far larger High Elven armies. This alliance proved successful however and the High Elven forces began losing ground. What happened next is a matter of some debate. High Elven historians attest that the Dark Elven armies used Wood Elven soldiers as unwitting bait to lure the High Elven armies into a trap, thus causing a schism between them. Dark Elven historians state that the Wood Elven armies turned on them after the Wood Elves met in secret with High Elven leaders and bargained for their independence. Some Wood Elven historians claim that after a brutal defeat on the field, they were met by High Elven dignitaries that offered them clemency if they turned on their allies. They initially refused, but after the dignitaries threatened to make the same offer to the Dark Elves, they had no choice but to accept. No matter the cause, the histories agree that the Wood Elves turned on their erstwhile allies and helped push the Dark Elves into a rapid loss of ground.
Facing the might of the two armies with their own relatively small one, the Dark Elves were beaten into a hasty retreat into their own territory. Losing every open encounter, the Dark Elf matrons developed a new strategy of combat. The armies switched from training as many as quickly as they could, to training only a select few in multiple different forms of combat and magic. As the High and Wood Elves advanced into their territory, they quickly found their supply lines cut out from under them, their soldiers ambushed while sleeping, their scouts captured, and their leaders assassinated. And even if they would make it to a Dark Elf settlement, they would find it abandoned and booby-trapped, warned by their fast and silent scouts. If the Dark Elves couldn’t face their enemies head-on, they would weaken them with quick and decisive strikes.
Eventually, the war ground to a stalemate. The High Elves couldn’t push into the Dark Elf territory far enough to capture any cities of note without taking severe casualties and the Dark Elves were only managing to hold the invading armies back and couldn’t muster a force strong enough to push back to the enemy capital. Thus, the war cooled into a tense peace. The leaders came together to draw borders, but neither side fully forgave nor forgot one another’s actions. High and Wood Elves viewed the change in tactics by the Dark Elves as an unethical violation of the standards of war. The Dark Elves felt a particular animosity toward the Wood Elves, considering them backstabbers in their darkest hour.

Dark Elf Families: Matrons of Order

The Dark Elf society, to an outsider, looks like an oppressive and cruel society of slave traders and backstabbers. But the truth is more subtle. The Dark Elves value tradition and filial piety above almost all else. To a Dark Elven citizen, their family name is their most valuable possession and they are taught from a very young age that to look after their parents and their younger siblings is the highest virtue. Ancestors that have achieved great things often have shrines in a household alongside the gods themselves. A Dark Elf going against the will of their family is considered one of the highest taboos and often causes them to be outcast from Dark Elven society as a whole. Dark Elf society is matrilineal meaning that the eldest woman in each family is revered as the household leader and receives great respect from her family and society. This also means that the males of the society don’t inherit wealth as frequently as the females.
Dark Elven families are quite large, often with multiple generations along with aunts, uncles, and cousins living in the same household. New children almost always reside with their mother. Males of the society are expected to care not for their own biological children, but for the children born to their sisters, aunts, or nieces. This results in a striking amount of sexual freedom for both men and women, but is often viewed from the outside as promiscuity. The Dark Elves do not marry in the traditional sense, instead favoring long term partners with one another that can end at any time with no concerns to material wealth or ownership.
However, to become a member of a Dark Elf family is not entirely a matter of heritage. When a family that cannot support another child has one, they are often adopted by more well to do families and raised as one of their own. These adopted children are considered just as legitimate as if they were born into the family. Also, should a family lose all their heirs or become destitute, they often ask to become assimilated into other families for their own safety. The latter is considered a morose ceremony as the members of the smaller family forsake their surnames. To take in such a family is both an extreme honor and grim burden, as it means ending another family's line.
The borders of Dark Elven civilization only goes so far as there are trees so many newer up and coming families have expanded underground, a difficult and slow endeavor. This has put multiple houses at odds with one another for territory. However, Dark Elves do not tolerate open hostility between families as they have a very strong sense of collective identity. Dark Elves do not war against fellow Dark Elves, same as a spider does not fight its own web. This leads to many tensions and conflicts needing to be resolved in other ways. Most families will attempt a diplomatic solution, but when that isn’t an option, sabotage and coercion is the favored outlet. Murder is considered a bridge too far by most houses, but subterfuge in almost every other facet is, while not accepted, tolerated.
Legends of Lolth’s rebellion and the tension of their enclosed territory have imbued the Dark Elves with a strong sense of symbiosis with nature and conservancy. Sustainable living is the cornerstone of Dark Elf society. In the wild, no creature is killed or plant destroyed unless it’s a matter of self defense or necessary to survival.

Dark Elven Sex and Gender

As with many Elven peoples, sexuality is seen as a fluid and non-binary matter. Same sex relationships are usually seen as just as acceptable as male-female relationships. Since Dark Elves have no marriage structure, same sex life partners are common and widely accepted. Inheritance is passed along by the family as a whole, not linearly, meaning some houses may have matrons with no direct biological descendants while still serving at the elder matron. Power dynamics in relationships are still a factor, with the elder female in a gay relationship considered slightly above their partner socially and is seen as the inheritor in cases of property or genealogy. Male same sex relationships are accepted with little controversy. Since children are passed down their mothers line, the males have no social obligation to sire an heir as with other societies.
Transgender and transexual Dark Elves are met with slightly more controversy. Lolth’s rejection of the Primal Elves mutable forms is sometimes cited against transgender and transexual Dark Elves. Ghaunadur, however, is considered the patron god of these people and teaches that just as they are part of nature, they can change their forms. Many of these people join the religious order of Ghaunadur, serving in various roles both in religious ceremonies and as forest guides. Some even consider them to be blessed by Ghaunadur and are highly sought after in forays into the forests for protection. Children born to transgender Dark Elves are still expected to be a part of their eldest mother’s family or eldest father if no woman is part of the union.

Slavery Amongst the Dark Elves

While the Dark Elves do take slaves, their slavery doesn’t look the same as many other societies. When a family becomes indebted to another and they cannot pay off the debt, a member of their family, usually male, will be sent to work for the owed family. They give him room and board and are expected to care for him as if he were one of their own. He’ll work for them for an agreed upon amount of time before returning to his native family. Injury or misuse of this person is often grounds for them to leave and the debt to be nullified. Children born to servant fathers needn’t worry about inheriting their father’s status since they’re considered to be their mother’s child. On the rare occasion that a female servant has a child while in servitude, the child is returned to the mother’s family to be raised by her family while she works off the remaining debt. Some trade of servants does occur between houses, with indentured servants being traded for goods or services or even other servants of special skills, but the family of the servant reserves the right to veto such a trade for any reason.
During their frequent clashes with external armies, the Dark Elves do sometimes take prisoners of war, though very rarely are they used for slave labor. They never bring them back to major settlements, often keeping them on the outskirts of their territory to prevent them from learning critical knowledge of their territory. Most prisoners are held as bargaining chips to be traded for passage, supplies, or captured Dark Elves. Captured military leaders are sometimes brought to Dark Elven cities to be tried for their crimes against their people.

Dark Elven Government: Independent Houses

Unlike many other cultures, the Dark Elves lack a centralized government. Societal etiquette govern the standard for how certain crimes and disagreements should be handled, but each family unit acts as its own governing body. Disagreements within families are thus resolved internally. Inter-family disputes are resolved in multiple different ways. Most often, the two matrons of the family will meet and agree on terms to fairly compensate both sides. In cases when these talks deteriorate, the High Priestess of Lolth is often called to serve as the mediator and serves as the ruling body between disputes. Her rulings are final and indisputable, as she is considered the mouthpiece of Lolth’s will.
In times of crisis, historically the many houses of the Dark Elves have convened to discuss threats to all of Dark Elven society. This is uncommon as it’s difficult logistically to gather all the matrons in the same place at the same time, so often houses are represented by either the second eldest woman of the family or the eldest daughter of the matron. The High Priestess of Lolth often resides over these meetings as an arbiter in the event of split decisions or in delivering guidance from Lolth herself.

There's my take on the Dark Elves. Any comments, suggestions, questions, outrages, and critiques are welcomed. This is my first comprehensive look at a whole race so if I've missed things, I'll try and patch them up. I'd like to do similar things for Orcs, Goblinoids, Kobolds, and others so those might be seen soon. Thanks!
submitted by Lerad to DnDBehindTheScreen [link] [comments]

My angry opinion on RoE, and thoughts around the themes in the series

First, let me just preface this with a disclaimer, I am only stating my own personal opinions regarding the plot and choices in this series, not anyone's personal playstyle. I wanted to vent my frustrations about the novel and see if anyone else felt the same way. I love Choices and most of the books I play on the app, but I wanted to give my uncensored opinion. If that isn't allowed I will either edit or remove my post should the powers that be wish it. This was a comment on another thread but I thought others would see it more if I made it into a full post, and it ended up being pretty long for a comment anyway
Warnings: Explicit language (nothing I'd think is NSFW) and some spoilers for the entire RoE series, but mainly the first book. Heavy criticism on plot and characters in the RoE series. Some references a choice in Book 1 of Bloodbound and the theme of BOLAS.
Without further ado my angry rant:
I played RoE a few years back when I first got the app, it was my first series. Looking back I can not believe I stomached this bullshit. I LOATH this series. MC is abso-fucking-lutely pathetic. The first couple of scenes with the EX, I wanted to stab him, cut him up with glass, or toss him overboard to the sharks. The way he talks to her. FUCK THAT. Also, the grandmother PISSED ME THE FUCK OFF.
Family DOES NOT give ultimatums. Look I get she wanted them to #livetheirbestlives but that doesn't mean she should get to decide what that looks like for them. They are not her and they are not be obligated to live their lives according to the way she did. I mean fuck what if Nerdy sis didn't want a goddamn tattoo. That's pretty messed up to manipulate someone's consent all for the money they might actually need (like in older bros case). Nerdy sis is also a badass she worked through college to achieve her ambition, I hate books that force people, especially female characters to believe family and love must always be more important than a career. If that is her dream, nobody has a right to tell her what should and shouldn't make her truly happy. Same for all the grandkids, Nana couldn't have foreseen the EX begin a POS cheater but still as a wealthy woman with her own lawyer surely she could've had the mental capacity to understand once you bind specific stipulations into law, there is no way to get around them if the circumstances change. She could've left a little wiggle room for MC not to have to fucking sell herself to any ye ole man to get her inheritance.
MC is also so fucking helpless, like needing a man or any LI in her life for it to be good is the biggest load of horseshit I've ever seen. Same for the bro, nobody should be strongarmed into marriage to save their company. Didn't little ole granny stop to ever consider that things could change in these relationships before the cruise? Oh hell, she built her life around another person with the hope he wouldn't up and drop her ass? Stupid as fuck, of course, he will. Never build your life with the expectation someone else will help you hold up the foundation with you, people come and go, she should be able to at least stand on her own for more than a couple days before jumping into the arms of the first man near her.
We could've at least gotten to custom make our own LI we'd be stuck with. If it were me I'd have either walked (NOTHING is worth more to than my Freedom to me, nothing and nobody), OR made a private deal with any random LI I could tolerate, and said "Act like we are a couple for a few months on this cruise, marry me, then after we can divorce for whatever made-up reason, and you can get 10 million of my inheritance money)" Get a prenup with those stipulations signed in secret and fake the whole engagement BS, then like six months later (about how long one of these stupid ass "love at first sight" marriages end up lasting, some turn out find but many if not most crash and burn, because surprise, it takes years of hard work to actually build a relationship and even those end up failing many times, ex asshole bf case in point), and then go off to live my life however I see fit too. If somehow I actually end up liking random LI, I could befriend or something and maybe have a real relationship down the line, like after I actually know the real them.
That is another thing too, these guys know pretty early on she needs a ring to get her money right? All three could easily be playing her for some of that cash. The barkeep and business dude most of all because that kind of money could really help them and she's hot enough to bang for a while to get it. Plenty of people in the world, men and women alike would try that. How in the span of a summer cruise would she be able to figure out if that were the case? These men in real life could be abusers, rapists, serial killers (one does travel a lot), and MC would never know before it is too late to save herself. Hell, HE could up and divorce her and with a good enough lawyer, take much of her money out from under her without a prenup.
I just can not fully explain my furry about this book because it so, sooo, soo unbelievably unrealistic and forced. That's why I can not even replay it. I played all the way through to give a fair shake once and because it was my first series, the art was cool and I though party sis, cousin, and some scenes were a little funny and cool, but nothing of substance came from it that could make me desire to reply it again. A word to the writers at PB, Give us something REAL. Like actually based off of a situation that could happen in real life. I love their historical fiction as an example. Stuff with supernatural elements or based on a D&D type world, of course, aren't going to be realistic, but books set in real locations in the modern era could at least offer real choices, like to forfeit the money by choice and just help your siblings and cousin get theirs. Also, for the love the Great Mother please stop making one gendered/only het MCs. All storylines could easily fit men or women, or non-binary MCs (wink wink nudge fucking nudge PB) and we could have the option of hetero, gay, lesbian relationships, poly relationships (more than the threesome option in BB), and no relationship (and make it look like a GOOD thing for once, not some sad no-diamond option, like me who plays as the single by choice bisexual glue that keeps my various friend groups together by fucking all of them)

The bottom line this book, and the whole series really shows it's age. I hate it, so many pretty much hate it, it's a headache and I'd really love to never see any other books anywhere close to this again. A waste of diamonds and time.
Thank you all for reading my bitchy rant.
submitted by FaithS3798 to Choices [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]

The Tier H Tier List

So, I'm sure most of you have heard of the Ultimate Discord Crafting Tier List, a tier list of every single card in the game made by members of this subreddit's Discord server and organized by Justini1212. This tier list sorted the cards in PvZ Heroes by two categories, Playability and Flexibility.
The tier list is pretty nice, and the format is useful for checking whether cards are good or not. However, the tier list is already exactly a year old, and very outdated. Even though there have been no updates to the game, new decks have been discovered, and many cards like Cro-Magnolia and Vegetation Mutation are no longer accurate on the list.
The Tier 1 Tier List (which I actually helped to make) attempted to fix these problems, but at this point, that tier list is also outdated. In addition to this, it does not contain every card (we seem to have somehow missed a few while making the list), and many people felt that a lot of the card ratings were a bit weird, like Savage Spinach being rated at B Playability.
Justini has talked about how he wants to organize a second Discord tier list, but at the moment the channel where things like that are organized currently has a different project going on, and it is likely that it will be a long time before another tier list is even started. So, I decided to make my own tier list to help PvZH players know which cards are good to craft or recycle.
Now, obviously if this tier list was made by only me it would likely be filled with mistakes and my own personal bias, but it was not. I took a lot of the card ratings from the Ultimate Discord Crafting Tier List and the Tier 1 Tier List (mentioned above), and I also took feedback from experienced PvZ Heroes players on the Discord server. I decided to name this list "The Tier H Tier List", replacing the 1 in "The Tier 1 Tier List" with H because H is my favourite letter.
Like the other tier lists mentioned above, this tier list is based on two main criteria:

Category 1: Playability

How good is the card in the decks it fits in?
S: Best of the best. The card should probably get nerfed in the state it's currently in because it's just that good. You're going to play it all the time in the decks where it works.
A: Very strong. Not something you'd see nerfed, but still a very strong card that you want to play every time.
B: Good. A very strong option in the decks, but it can theoretically be gone without for one reason or another.
C: Decent. It can be worth playing, but there are reasons to drop it as well.
D: Bad. It's really not worth playing, though it at least has some merit one way or the other.
F: Terrible. There's absolutely no reason to play this card.

Category 2: Flexibility

How many decks can this fit in?
S: This is a good option in basically any deck of the class. Top tier crafting material.
A: This is a good option in at least 3 different decks.
B: This is a good option in at least 2 different decks.
C: This is a build around card that itself enables a deck, but doesn't really fit into anything else.
D: This is a good option in only one deck.
F: This card just doesn't have a deck where it fits in, either because it's just that outclassed by other cards for the deck it wants to be in, or because it wants to be part of a deck that simply doesn't exist.
Finally, since there are two key factors that these criteria do not cover, there are two extra modifiers that can be added onto each rating:
*: This is a tech card, and can move up or down significantly depending on whether or not you run into what it counters a lot.
#: This is a budget card, and moves up in the respective category if your resources are limited.
The list is sorted by flexibility, then by playability. Cards in the same tier are sorted by the order they appear in the game (so sorted by class, then cost, then name)
Without further ado, here is the tier list: https://1drv.ms/x/s!At0QUD8Co5MTlXqTPyjOmQFBZ4Fq
I put the tier list into an Excel file not only because you can copy-paste the list into your own spreadsheet if you want to sort it differently, but also because this makes it easier to edit. If you think I made an obvious mistake on some of the cards, leave a comment on this post and I might change it. If you still want the list in text form for some reason, here it is:

S Tier Flexibility

Galacta-Cactus - S
Bananasaurus Rex - S
Snapdragon - S
Ketchup Mechanic - S
Area 22 - S
Interstellar Bounty Hunter - S
Space Cowboy - S
Jugger-Nut - A
Blooming Heart - A
Berry Blast - A
Bonk Choy - A
Apple-Saucer - A
Quickdraw Con Man - A
Line Dancing Zombie - A

A Tier Flexibility

Tricarrotops - S
Garlic - A
Red Stinger - A
Black-Eyed Pea - A
Split Pea - A
Rotobaga - A
Astrocado - A
Cyborg Zombie - A
Teleportation Zombie - A
Genetic Experiment - A
Going Viral - A
Surprise Gargantuar - A
Elderberry - B#
Grow-Shroom - B
Moonwalker - B
Disco Dance Floor - B
Imposter - B
Fishy Imp - B

B Tier Flexibility

Corn Dog - A
Spikeweed Sector - A
Gatling Pea - A
Bog of Enlightenment - A
Supernova Gargantuar - A
Cool Bean - B*
Arm Wrestler - B#
Sumo Wrestler - B#
Sweet Pea - B
Lima-Pleurodon - B
Shellery - B
Sportacus - B
Dark Matter Dragonfruit - B
Lil' Buddy - B
Wing-Nut - B
Biodome Botanist - B
Extinction Event - B
Synchronized Swimmer - B
Loudmouth - B
Teleport - B
Wormhole Gatekeeper - B
Disco-Naut - B
Moon Base Z - B
Black Hole - B
Zombology Teacher - B
Zombie King - B
Fire Rooster - B
Pogo Bouncer - B
Poppin' Poppies - C
Lurch for Lunch - C
Regifting Zombie - C

C Tier Flexibility (Enables Decks)

Pecanolith - A
Vegetation Mutation - A
Onion Rings - A
Gadget Scientist - A
Headhunter - A
Headstone Carver - A
Captain Flameface - A
Three-Nut - B
Cro-Magnolia - B
Zombot Drone Engineer - B
Aerobics Instructor - B
Flag Zombie - B
Zombie Coach - B
Toxic Waste Imp - B
Mixed-Up Gravedigger - B
Astro-Shroom - C
Potted Powerhouse - C
Jelly Bean - C
Zookeeper - C
Ancient Vimpire - C
Team Mascot - C
Primeval Yeti - C
Cat Lady - D
Trickster - D
Valkyrie - D
Flamenco Zombie - D
Imp Commander - D

D Tier Flexibility

Haunted Pumpking - A
Plant Food - B#
Monkey Smuggler - B#
Forget-Me-Nuts - B
Shamrocket - B
Imitater - B
Cheese Cutter - B
Hover-Goat 3000 - B
Neutron Imp - B
Imp-Throwing Imp - B
Raiding Raptor - B
Tricorn - C#
Alien Ooze - C#
Chimney Sweep - C#
Hail-a-Copter - C#
Bungee Plumber - C#
Healthy Treat - C#
Rolling Stone - C#
Smoke Bomb - C#
Shroom for Two - C
Wild Berry - C
Veloci-Radish Hunter - C
Zapricot - C
Sonic Bloom - C
Clique Peas - C
Muscle Sprout - C
Apotatosaurus - C
Laser Cattail - C
Rescue Radish - C
Snake Grass - C
Primal Sunflower - C
Twin Sunflower - C
Magnifying Grass - C
Mustache Monument - C
Rocket Science - C
Unlife of the Party - C
Exploding Fruitcake - C
Quasar Wizard - C
Binary Stars - C
Jurassic Fossilhead - C
Cosmic Sports Star - C
Landscaper - C
Zombot Battlecruiser 5000 - C
Ice Pirate - C
Excavator Zombie - C
Trapper Zombie - C
Zombot Plank Walker - C
Wall-Nut - D
Banana Bomb - D
Admiral Navy Bean - D
Bird of Paradise - D
Eyespore - D
Sage Sage - D
Cosmic Flower - D
Goat - D
Fraidy Cat - D
Nibble - D
Zombie Yeti - D
Primordial Cheese Shover - D
Leprechaun Imp - D
Beam Me Up - D
Fun-Dead Raiser - D
Gargantuar Mime - D
Kitchen Sink Zombie - D
Barrel of Deadbeards - D
Meteor Z - D
Sugary Treat - D
Zombie's Best Friend - D
Disco Zombie - D
Planetary Gladiator - D
Knockout - D
All-Star Zombie - D
Intergalactic Warlord - D
Undying Pharaoh - D
Ducky Tube Zombie - D

F Tier Flexibility

Guacodile - B
Blockbuster - C*#
Primal Peashooter - C*#
Plantern - C#
Tough Beets - C#
Fire Peashooter - C#
Mars Flytrap - C#
Hot Date - C
Health-Nut - C
Marine Bean - C
Pear Cub - C
Banana Launcher - C
Turquoise Skull Zombie - C
Cryo-Yeti - C
Sting Bean - D#
Pismashio - D#
Pea-Nut - D#
Pea Pod - D#
Skyshooter - D#
Whipvine - D#
Cattail - D#
Cosmoss - D#
Morning Glory - D#
Bloomerang - D#
Power Flower - D#
Snorkel Zombie - D#
Surfer Zombie - D#
Kite Flyer - D#
Rodeo Gargantuar - D#
Mini-Ninja - D#
Space Pirate - D#
Stealthy Imp - D#
Photosynthesizer - D
Primal Potato Mine - D
Steel Magnolia - D
Cosmic Nut - D
Body-Gourd - D
Puff-Shroom - D
Gloom-Shroom - D
Half Banana - D
Party Thyme - D
Torchwood - D
Flourish - D
Moonbean - D
Typical Beanstalk - D
Banana Split - D
Spyris - D
Vanilla - D
Carrotillery - D
Shrinking Violet - D
Whack-a-Zombie - D
Aloesaurus - D
Cob Cannon - D
Dog Walker - D
Energy Drink Zombie - D
Hunting Grounds - D
Killer Whale - D
Pied Piper - D
Total Eclipse - D
Mondo Bronto - D
Gargantuar-Throwing Gargantuar - D
Interdimensional Zombie - D
Cosmic Scientist - D
Pool Shark - D
Parasol Zombie - D
Grave Robber - D
Trapper Territory - D
Zombot's Wrath - D
Zombie Middle Manager - D
Cone Zone - D
Buried Treasure - D
Graveyard - D
Laser Base Alpha - D
Zombie High Diver - D
Unthawed Viking - D
Poison Mushroom - F#
Poison Ivy - F#
Grape Responsibility - F
Potato Mine - F
Small-Nut - F
Cactus - F
Gardening Gloves - F
Grave Buster - F
Sea-Shroom - F
Water Chestnut - F
Hibernating Beary - F
Primal Wall-Nut - F
Pumpkin Shell - F
Spineapple - F
Force Field - F
Mirror-Nut - F
Prickly Pear - F
Starch-Lord - F
Doom-Shroom - F
Grizzly Pear - F
Smackadamia - F
Gravitree - F
Loco Coco - F
Soul Patch - F
Wall-Nut Bowling - F
Button Mushroom - F
High-Voltage Currant - F
Hot Lava - F
Reincarnation - F
Veloci-Radish Hatchling - F
Buff-Shroom - F
Fireweed - F
Seedling - F
Shelf Mushroom - F
Berry Angry - F
Cosmic Mushroom - F
Invasive Species - F
Mushroom Grotto - F
Mushroom Ringleader - F
Punish-Shroom - F
Strawberrian - F
Molekale - F
Pair of Pears - F
Pair Pearadise - F
Petal-Morphosis - F
Pineclone - F
Sergeant Strongberry - F
Sour Grapes - F
Transfiguration - F
Atomic Bombegranate - F
Bluesberry - F
Electric Blueberry - F
Lava Guava - F
Sizzle - F
Cherry Bomb - F
Dandy Lion King - F
Poison Oak - F
Grapes of Wrath - F
Kernel Corn - F
Banana Peel - F
Peashooter - F
Sweet Potato - F
Umbrella Leaf - F
Cabbage-Pult - F
Coffee Grounds - F
Doubled Mint - F
Lily of the Valley - F
Pea Patch - F
Captain Cucumber - F
Cosmic Pea - F
Fertilize - F
Grape Power - F
Repeater - F
The Podfather - F
Re-Peat Moss - F
Savage Spinach - F
Plucky Clover - F
Pod Fighter - F
The Red Plant-It - F
Bamboozle - F
Super-Phat Beets - F
Espresso Fiesta - F
Iceberg Lettuce - F
Lily Pad - F
Snowdrop - F
Weenie Beanie - F
Cosmic Bean - F
Grave Mistake - F
Lightning Reed - F
Pear Pal - F
Snow Pea - F
Sow Magic Beans - F
Chilly Pepper - F
Go-Nuts - F
Mayflower - F
Planet of the Grapes - F
Spring Bean - F
Bean Counter - F
Leaf Blower - F
Navy Bean - F
Winter Squash - F
Witch Hazel - F
Jolly Holly - F
Jumping Bean - F
Melon-Pult - F
Shooting Starfruit - F
Smoosh-Shroom - F
Threepeater - F
Brainana - F
Sap-Fling - F
Winter Melon - F
The Great Zucchini - F
Bellflower - F
Kernel-Pult - F
Sunflower - F
Fume-Shroom - F
Pepper M.D. - F
Sun-Shroom - F
Water Balloons - F
2nd-Best Taco of All Time - F
Jack O' Lantern - F
Mixed Nuts - F
Solar Winds - F
Sunflower Seed - F
Sunnier-Shroom - F
Venus Flytrap - F
Chomper - F
Heartichoke - F
Lawnmower - F
Metal Petal Sunflower - F
Sun Strike - F
Venus Flytraplanet - F
Briar Rose - F
Squash - F
Laser Bean - F
Smashing Pumpkin - F
Tactical Cuke - F
Three-Headed Chomper - F
Toadstool - F
Astro Vera - F
Cornucopia - F
Secret Agent - F
Skunk Punk - F
Yeti Lunchbox - F
Haunting Ghost - F
Haunting Zombie - F
Squirrel Herder - F
Dolphin Rider - F
Vimpire - F
Vitamin Z - F
B-flat - F
Cosmic Yeti - F
Kangaroo Rider - F
Overstuffed Zombie - F
Sneezing Zombie - F
Locust Swarm - F
Smashing Gargantuar - F
Vengeful Cyborg - F
Deep Sea Gargantuar - F
King of the Grill - F
Maniacal Laugh - F
Nurse Gargantuar - F
Octo Zombie - F
Zombot 1000 - F
Cardboard Robot Zombie - F
Mustache Waxer - F
Paparazzi Zombie - F
Cell Phone Zombie - F
Cryo-Brain - F
Evolutionary Leap - F
Transformation Station - F
Brain Vendor - F
Duckstache - F
Electrician - F
Gentleman Zombie - F
Medulla Nebula - F
Trick-or-Treater - F
Zom-Blob - F
Drum Major - F
Mad Chemist - F
Mountain Climber - F
Thinking Cap - F
Triplication - F
Copter Commando - F
Pirate's Booty - F
Portal Technician - F
Shieldcrusher Viking - F
Wizard Gargantuar - F
Bad Moon Rising - F
Zombot Dinotronic Mechasaur - F
Backup Dancer - F
Loose Cannon - F
Mystery Egg - F
Tennis Champ - F
Conga Zombie - F
Cuckoo Zombie - F
Final Mission - F
Newspaper Zombie - F
Space Ninja - F
Abracadaver - F
Exploding Imp - F
Fireworks Zombie - F
Gizzard Lizard - F
Jester - F
Unexpected Gifts - F
Cakesplosion - F
Cosmic Dancer - F
Orchestra Conductor - F
Stupid Cupid - F
Tanklyosaurus - F
The Chickening - F
Foot Soldier Zombie - F
Frankentuar - F
Gargantuar-Throwing Imp - F
Hippity Hop Gargantuar - F
Imp-Throwing Gargantuar - F
Disco-Tron 3000 - F
Gas Giant - F
Gargantuar's Feast - F
Baseball Zombie - F
Camel Crossing - F
Conehead - F
Escape Through Time - F
Gargologist - F
Leftovers - F
Terrify - F
Turkey Rider - F
Celestial Custodian - F
Lost Colosseum - F
Trash Can Zombie - F
Weed Spray - F
Bonus Track Buckethead - F
Buckethead - F
Medic - F
Stompadon - F
Chum Champion - F
Monster Mash - F
Screen Door Zombie - F
Coffee Zombie - F
Defensive End - F
Ra Zombie - F
Knight of the Living Dead - F
Wannabe Hero - F
Swabbie - F
Imp - F
Zombie Chicken - F
Barrel of Barrels - F
Dr. Spacetime - F
Frosty Mustache - F
Hot Dog Imp - F
Swashbuckler Zombie - F
Backyard Bounce - F
Cosmic Imp - F
Smelly Zombie - F
Barrel Roller Zombie - F
Firefighter - F
Tomb Raiser Zombie - F
Blowgun Imp - F
Walrus Rider - F
Cursed Gargolith - F
Zombot Aerostatic Gondola - F
Zombot Sharktronic Sub - F
Zombot Stomp - F
submitted by kevinlel to PvZHeroes [link] [comments]

Invisible Object Culling In Quake Related Engines (REVISED)

Prologue
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 developerss 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 hammer [link] [comments]

[f][lamenters] No Respite

If you're interested in reading more of my guff, you can find me over on AO3.
NO RESPITE
The faintest of ripples slunk along the water’s dark surface, grasping and clinging to the cracked stone and half-rotten wood of Belamor’s docks. A host of creatures - caped moths, skimmers, fat-bodied insects - skimmed just above the ogling, eager eyes of harbour fish as they swam through the human detritus that found its way from city to harbour. It promised to be an evening of anticipation: when the fliers came too close to the water, when they clumped and swarmed, only then would those below strike. Until then…
A stalk of metal slid up through the grungy liquid. Fish and insects scattered away from the intrusion in their nightly dance. A smooth pane of dusky yellow metal followed, rounded in the curvature of a skull. Then came the crimson-filled sockets, unblinking, focused on the shoreline ahead.
Helix Adept Cabar pushed himself through the sucking mud and slime to gain a firm footing on what could be loosely considered solid ground. Garbage, seaborne weeds and overconfident leeches clung to his armour. He’d walked up and down the collected centuries of trash that a moderately busy port accumulates, and - while there were certainly some things in the muck that would be of no small interest to Imperial scholars - the Space Marine had no desire to go back any time soon.
There were more pressing matters, his desires notwithstanding.
Cabar dropped the wrecked half-corpse he’d been carrying into the muck. When the Infiltrator Squad had made their daring assault on the Drukhari hover-barge, the fighting had been intense, requiring the demi-Apothecary to focus much more on combat than his usual work of triage and progenoid extraction. Forced up and over the side, he’d had only a moment to drag one of his attackers with him before falling away from the battle.
The intention had been to interrogate the xeno for information. Not the greatest plan in the world, considering their resistance - even enjoyment - of most persuasive techniques. If nothing else, it would have been satisfying to end the creature personally.
Still. Looking down on the ragged torso - the lower half had snagged on something during their underwater trek and been torn away - the outcome was acceptable. The withered body, the pale skin torn away in strips, the empty holes in the skull where eager scavengers had made their way in for the juiciest morsels, the shelled things slithering up exposed entrails. It did the hearts good to see one of that arrogant species laid so crassly low.
A civilisation might rule the stars for untold aeons, but this was the fate of all aliens: dead in the mud with vermin eating their insides. Even the oldest races of the galaxy would be food for worms in the end. Only the Imperium would endure.
‘Cabar to squad,’ he tried on the vox. No response was forthcoming, but he hadn’t expected one. Both the Drukhari and Imperials were making good use of wide-spectrum jamming equipment, attempting to foul the other side’s use of communications and sensitive technologies. Both had intended their goals to be accomplished in secret. The pitched battle in a hovercraft, bolters blazing and war-cries bellowing, had put something of a tarnish on that objective.
Then again, as the Helix Adept looked up at the sheer stone wall that separated the dock proper from incoming vessels, maybe stealth had never been possible, to begin with. The number of moored ships was suspiciously low for a berth of this volume, and there were no raised voices from harbourside bars or crews burning the midnight oil. Not even the retch, pitch and piss of drunks and vagrants.
Just the slow, endless wash of breakers on shore, the creak of timber and the low hum of power armour. A city holding its breath as the binary moons hid their pale, pocked faces behind a veil of clouds.
Perfect.
Cabar’s leap took him a good two-thirds of the way up the wall, the slip-activated spikes of the Phobos boots digging in to anchor him. He reached up to grasp a mooring peg, an ancient iron affair coated with rust and grime, hauling himself up and over the quay’s lip in a combat crouch. His suspicions had been correct. The harbourside was deserted. Pubs were closed, their lanterns extinguished. Hand-carts and stalls had been pushed hurriedly off the cobbled path, their owners far more concerned about getting indoors than their worldly possessions.
The Marine scuttled across the few metres of open space, head low, trusting in the muddy yellow of his camouflaged armour and broken line of sight. It was hardly a dignified advance, but this wasn’t the time for Codex-standard tactics. He came up under the awning of a closed shopfront, considering his options.
Vile as the Drukhari were, they lived their lives in the gutters, spires and shadows of their Dark City, fighting and dying in the dark. Belamor was a city nestled in the rising cusp of a hill - the staggered, uneven houses, steeples and manses formed a network of blind alleys and kill-zones. To approach the city from the harbour was teetering on the edge of suicide against an entrenched enemy, particularly one so suited to the terrain.
All Cabar could hope for was that his battle-brothers had cost the xenos time and manpower. If the web was already drawn across the city, if there were Kabalites on rooftops with splinter rifles, he was finished, no matter his courage or ability. His own bolt carbine was currently somewhere on the bottom of the harbour, and weaponry fit for Astartes was unlikely to be present on the world for few thousand years yet.
The hidden opponents would know that. They’d fought Space Marines before, that had been obvious in the quickness of their reaction to the boarding attack and their splitting of the Infiltrator squad. Anybody who’d survived an assault from the Angels of Death knew that unity was their greatest strength. A Space Marine alone was formidable, but in formation - well, they’d won the galaxy as Legions. The Drukhari would know what to expect from an unarmed warrior: a bull rush, a death-or-glory charge that would see him take a weapon or die in the process.
They’d anticipate him putting all his trust in his wargear, praying the plate would turn the venom-needles and daggers, would carry him into melee where he could snatch a weapon and fight back on more equal footing.
What they wouldn’t anticipate was subtlety. Cabar was just a wretched monkeigh, after all. No matter how badly his squad had hurt them, no matter how tired they were from the fight, how little time they’d had to spread through Belamor, they’d never be too cautious of a primitive. They’d fall into the same trap so many of their kind had before. How much trouble could a lone Space Marine be?
But this was what the genius of Frater Cawl and the shrewdness of Lord Guilliman had come together to create. The Vanguard had been made to do things not even the Imperium could reckon with, let alone their long-time foes.
Cabar blink-clicked the runes that marked his armour’s cutting-edge functions. As the low-level scan pulsed out, he turned his immediate attention to his surroundings. The window of the store could provide interesting possibilities, but breaking it would give away his location and his only advantage. It appeared to be some kind of tannery, judging by the signage and rack of skins behind the glass. There’d be tools inside. Flensing knives, hatchets, deboning implements - but he’d need to find a way inside first, and the padlocked door may as well have been the Eternity Gate.
Scan results filtered into his helm. Nothing that registered as a body’s heat signature, either human or alien. All the mortal residents of Belamor were cowering indoors, and the Kabalites wore temperature-stable armour. Effective for blending into a crowded city, or the brutal underbelly of Commorragh, but in a city without active industry or an active population…
Yes, that was it. Impossible to get a direct fix, but there they were - shadows colder than shadows should be. Not as many as Cabar had expected, but closer by far. He must have arrived right on their heels.
He touched the bleeding heart on his pauldron. The sacrifice of his squad had bought him more than time, it had bought him an opportunity. The xenos had no time to fortify or regroup. They had simply left a disorganised rearguard before plunging into the city in force themselves, desperate to reach their target before further opposition appeared.
Creeping along the storefront, Cabar shut down the higher electronics and functions of his armour. The hum faded away entirely. The time for high-tech war was done. From this point, Cabar’s war would be won or lost by skill - and chance.
‘For those we cherish,’ he whispered. The second part of the motto would have to speak for itself when he was done.
He moved more quietly than anything wearing ceramite had a right to, pressed close against the storefronts and closed doors, waiting for clouds to veil the twin moons before he made his final approach. A lean-to had been propped against a warehouse wall - Cabar could smell the sickness coming from it, his helm’s air-filers having powered down. A beggar or similar unfortunate soul had camped out here, seeking alms, but more likely receiving kicks and abuse from the dockside crowd.
Offering a wide view of the harbour and the streets leading into the city, it was just the right place for vermin to hide. A man in a hurry to charge his foes wouldn’t have given it a second thought, would have concentrated on dark alleys and flat rooftops. A man in a hurry would have been taken in the back or flank by a clever, clever opponent.
Cabar had learned patience and endurance well. His Chapter had been on the wrong side too often in the past, had been drawn into losing battles because of haste or ill-consideration.
Not this time.
His leap was silent, graceful, devastating. Cabar came down with both feet on the lean-to, rewarded with an incredibly satisfying crunch as his full weight came down on a hidden xeno. A blade tore through the sheeting to his left - a second attacker - and Cabar caught the briefest glimpse of a pale, surprised face through the tear as he swayed away. He didn’t wait for the counterstrike. One giant fist crashed into the fabric where the xeno’s skull had been, and the piston of Cabar’s Helix Gauntlet - made to crack open Space Marine armour to extract the progenoid organs - fired with a muffled crump. The figure beneath the canvas went slack.
Glancing down, Cabar saw where bone had come through sheeting and blood had already started to pool around his boots. He stepped off quickly. He had no desire to leave an easy trail to follow, though neither of the Drukhari would be likely to track him in the near future unless a very skilled and very patient Haemonculus was nearby.
The Space Marine tossed the bodies thoroughly and swiftly. He discounted the vicious pistols and the splinter rifle. Neither had been made with human standard in mind, and Drukhari equipment was notoriously unfriendly to unpracticed wielders. The more practical weapons - weighted throwing daggers, a barbed garrotte - went into sealed pouches on Cabar’s combat harness. Hefting the long-knife the second xeno had wielded, the Adept considered a moment before casting it aside.
There was no telling how the thing would work in real combat, if it would turn into a snake and wind its way up his arm or something equally outrageous. Better not to rely on the fickle nature of the enemy’s armaments when his own Emperor-given hands would serve for the nonce.
With this blunder, the Drukhari had committed the very error they had expected of Cabar. They had focused on their mission rather than the destruction of their enemies…
There is no pleasure in Sybarite Tzamien’s work.
She knew this from the start, but she still curses herself for allowing the objectives to be so tightly defined by the Archon. Perched on a monkeigh mansion’s crude iron weathervane, wrought in the image of some ridiculous prey animal, she surveys the silent city of Belamor through enhanced optics. There isn’t a soul outdoors to ‘accidentally’ gut, no screams to be torn from the crude people below. There’s nothing.
And even less than that, as she feels the sudden absence of the two-person ambush team from her neuro-link. She grits her teeth. There had been no time to pursue the fallen Space Marine, no time to inflict proper pain upon those who had remained - the attack had cost her forces valuable time, valuable lives, and those losses were compounding.
It wasn’t the human warriors she was concerned about. Certainly not the cattle below. But other forces moved in this filthy abode, and it was to avoid their attention that secrecy and swiftness had been made paramount.
Tzamien curses. She activates her communicator. ‘Rezoar. Belom. Take your squads to the junction. Ensure the monkeigh goes no further.’
‘Do you want it alive?’ comes the reply. She can’t tell which of the twins it is.
The temptation is strong. There is glory to be had in such a capture - after Tzamien had instructed it in the arts of anguish first, of course, for dogging her heels. ‘No,’ she replies, and the reluctance is genuine. ‘Be quick, then return to your search pattern. We must be gone before dawn.’
‘I hear and obey, Sybarite.’
Tzamien puts the Space Marine from her mind. Now, if she were a pathetic human, where would she hide?
In the shadows behind a low stone wall, Cabar hid.
He’d pushed up as far and fast as he’d dared, knowing that with his information warfare suite disabled the Drukhari would be able to organise and encircle him unhindered. The rapidity of their response had still nearly caught him by surprise: it had been a mix of paranoia and the filtering of sounds that might have been a cat on a tiled roof that had caused him to take cover.
The xenos had decided that their quarry wouldn’t risk the rooftops and exposure under the intermittent moons, but nor could they remain aloft themselves at the risk of letting the Space Marine slip through their net.
In the brutal street-fighting of the Dark City, there was only one way to deal with an opponent who refused to commit to honest battle - overwhelming force. The six members of a Kabalite squad leapfrogged each-other down the street that a moment earlier Cabar had been about to ascend. Each was intimately aware of the others positioning, indicating experience and comfort with their fellows - veterans, or whatever passed for it in the motley armed forces of the Drukhari. In a few seconds, the flankers would be coming over or around the stone wall.
Cabar judged their positions by what he could see - two on the far side of the street, two haunting the middle, which meant two would be about to expose him. He’d have only a few seconds once they did to make his move.
When the first xeno vaulted the barrier, the Adept grabbed the alien’s head, muffling its shocked exhalation. His other arm shot out to lock the rifle against his opponent’s chest, unable to fire. They stood in tableau for a precious moment - that simple span of time that it took for the flanker’s partner to believe it was safe to proceed.
As soon as the second Drukhari was starting to clear the wall, Cabar crushed the first’s skull in his grip. There was little resistance against a force that could tear plates off a tank. Cabar turned to put the corpse between him and his next foe in case the Kabalite was quicker on the draw, but the xeno barely had time to land before the Space Marine’s fist was lashing out. Another skull shattered under a merciless, instantly lethal blow.
Cabar completed his turn, discarding the first corpse and checking the second’s fall, but to do so he had to release his grip on the splinter rifle which clattered on the cobbles. In an instant, the Adept had whipped the throwing daggers from his belt and into the space he’d last sighted the xenos pair in the middle of the street before vaulting the wall himself, exchanging positions with the unlucky duo he’d slain.
Only one of Cabar’s thrown weapons found its target, sending a Kabalite gurgling and thrashing to the ground, but the three remaining reacted without hesitation, showering the far side of the low wall with rifle fire. Crystalline splinters snapped and broke on stone, failing to find a target into which to discharge their lethal poison.
The Drukhari would adjust their fire in a moment. They’d snapped shots out at the appearance of a threat rather than the threat itself, and in a moment they’d deduce that the Space Marine had slipped from cover. A moment, that’s all they needed to survive. A mere moment.
But in that thin slice of time, Cabar was already moving, circling, pushing his transhuman body and the marvellous engineering of Mark X armour to their limits. The Drukhari were faster than a base human. The Aeldari as a species were renowned for their unnatural grace and agility, their incredible control, their mindfulness. The Dark Kin took those racial advantages and honed them to the keenest of edges in their ruthless society, a society that forged vicious killers whose names were feared across the galaxy.
It wasn’t enough.
Cabar lowered his shoulder and ran through the surviving Kabalite before she had a chance to correct her aim. Bones broke, blood sprayed, but the Adept didn’t pause to see the damage - he’d incapacitated the foe, yet two remained.
The last pair split in either direction, hoping to force the Space Marine to pause, or at least choose badly. Dull spines protruded from beneath the barrels of their rifles: fearsome monomolecular blades that would pare even ceramite with the ease of a fisherman shucking shells. With no time to properly aim, with no guarantee that the splinters would find a seal or groove in power armour, and with no certainty that the poison would be fast enough or effective enough to bring their target down, the Kabalites chose to make their stand in the ancient way.
It was an audacious move. The machine-spirit of Cabar’s armour shrieked as a thrust pierced his side, flush along his ribs. His response was instinctive: he kicked the xeno in the chest, the force defeating the light weave the Kabalite wore and pulping every major organ in the alien’s torso.
The other Kabalite was more ambitious, aiming her thrust for Cabar’s head - but it was a smaller target, and he ducked to the side to escape harm, the momentum from his kick carrying him past. The Adept turned a fraction of a section faster than his opponent, his elbow slamming into the Kabalite’s skull with enough force to snap her neck.
Alone in the street, Cabar breathed hard. There was a fierce fire in his chest: he willed the hammering of his hearts to slow. His attack had been ill-advised and exactly the sort of suicidal foolishness that would have seen him dead to begin with, but the enemy had expected a war of stealth in their fresh pursuit. Keeping them off-balance and uncertain gave him certain advantages, but it also ran terrible risks. The red haze at the corner of his vision, the prick of his angel’s teeth on his lips - the twin curses of the Blood Angels had been passed down to their Successors, and the Lamenters were familiar with both.
Many had thought the Primaris immune, or at least resistant - that brief hope had been quashed in the most tragic way. Cabar shook his head, and the red retreated - for the moment. He needed all his wits about him, more than the strength that the Thirst would offer.
Think. To reach him so quickly, the Drukhari would have to have been searching close by. They would not have done so in ignorance, meaning they had an idea of where their quarry was located - not on the harbourfront, but close to it, likely in the thin band of workshops and light industry that banded Belamor like a notched belt overtaken by a protruding gut. That made sense.
Why hide in that fortress on the hill, or the district of the rich and privileged? Too obvious. A mind shrewd enough - or at least, a person connected enough - to divine the coming of a Drukhari raid would have thrown themselves down the deepest bolthole in town.
There were few places more well-known as dens of intrigue and secrecy than bars and brothels, of which Belamor was blessed with an abundance of, but only one was more than a century old. Only one proudly hung a weather-stained sign of a grinning rodent outside its door. Only one tavern had been owned and operated by Belamor’s current de facto leader in his misspent youth.
Sybarite Tzamien idly licked the blood from her gloves.
It wasn’t particularly satisfying, but one had to keep up appearances. To command a detachment of Kabalite Warriors was not a given rank, it was decided within by the warriors themselves - with knives in the back whenever weakness was shown. Her leadership had been unquestioned, and her forces continued to obey her without comment, but Tzamien was not ignorant of her position.
Rezoar and his squad were dead. That was a shame, but more importantly, they were dead on her orders. That was weakness, and far more dangerous.
This was supposed to be simple. How had things gone so wrong?
Was she losing her touch? Or was there a mole inside the Kabal, feeding information to her enemies? Had the Space Marines had another warband close by? It seemed strange that a lone warrior - and a medic at that - would be so immediately lethal. Was the Imperial attack simply being used as cover by a rival - hers or her Kabals - to spoil the raid and steal their prize?
The endless politics of the Dark City were delight and despair in equal measure, but if Tzamien hadn’t enjoyed them, she would have fled to the cold embrace of the new, dead god with the others.
‘Kill me,’ begged the monkeigh offal through a mouth of pulled teeth, the blood staining his blue doublet a delicious shade. ‘Please, kill me.’
He’d given the target’s location before Tzamien had even started on the man’s fingernails. It was pathetic, really, and barely worth her effort - but, as she’d acknowledged, appearances had to be kept up and it wouldn’t do to have the Kabal sniffing out any sign of shakiness or lack of resolve. They’d turn on her like gral in a blood-den.
Tzamien considered letting Belom know his brother had died, then decided against it. The fool would only hurry over to spoil her fun. She’d take her prize alone and wait for whatever forces had been interfering with her affairs, and let them know just how displeased she was.
‘Kill me,’ the wretch repeated.
‘Later, perhaps,’ she replied with her most winning smile.
The man let go of his bowels at last.
Tzamien left him crucified on the terrace, lithely moving down to the streets below, aglow with the satisfaction of pain, terror and a job well done.
submitted by wecanhaveallthree to 40kLore [link] [comments]

Fixing the Bounty Hunter Story (Specifically Belsavis)

Obviously, there are spoilers for the Bounty Hunter class story as well as some minor spoilers for KotFE/KotEE, if you're worried about that. As always, there is a TL;DR of the changes I'll make at the bottom, although this is (hopefully) less of a slog than my previous posts.
I planned to have a break after my Fixing Consular Chapter 1 so as not to spam the subreddit but I recently started my new hunter and this story has been on my mind, so I guess this is part 3 of my 'Fixing' series. (Fixing Shadow of Revan can be found here.) This one shouldn't be as long as I'm mostly focusing on one planet, rather than the 5 from Consular Chapter 1 or the 3+ from SoR but I'm also going to look at some companions and how they could have been implemented better.
I'm going to start out with a pretty strong claim: I think the Bounty Hunter story is possibly the best in the game. It's the only one I've really played more than once because I feel like there's so much different that I could do. It doesn't have the highs of the Agent or Smuggler. It doesn't have the overall impact of the Knight or Warrior or the grand scale of the Consular but what it does have is fun stories and strong, likable characters… well, except for one.
See, I think there are two major issues with the bounty hunter story and both revolve around companions you receive throughout your journey. The first is more simple, so I'll start there:

Fixing Gault

Now, I love Gault. He's a fun character. Daran Norris has a great voice that is absolutely iconic and Gault represents the dirtier side of bounty hunting; not evil, per se, but amoral.
The problem with his inclusion is that it outright requires you to betray your client and for no real reason. Gault provides you with the means to cheat but not the motive. That's what we're going to fix.
The main difference here will be your mission. You will not be sent to specifically kill Tyresius Lokai. Instead, you will be sent as a 'debt collector.' You go after Tyresius to try and get him to pay back one of the countless ganglords he swindles. You finally catch up to him and he makes you a deal: he doesn't have the money, but if you fake his death for him, he will stay as your prisoner until he pays it off. You can pay the debt off, if you feel like it, or just send one of his body doubles as payment and pocket the money he owes for his 'freedom'. Basically the same as the original, but now you have a reason to keep him alive and it doesn't break your contract. For a light side character, you now have a contract to fulfil in which you keep him safe and he pays away his debt. For a dark side character, you keep him alive and pocket the debt money, letting them take a fake body double as payment.
On top of this, it now gives more of a reason for his money-making schemes while on board the ship. Instead of just scamming people because he's bored, he has an actual aim: to pay his way off the ship. And, as you go along, he gets a taste for the hunting life and decides to stick around even after paying his dues. A simple, elegant fix to fit the character into the story. It also leads better into his role in KotFE, where he uses his scam artistry for good, rather than for himself.
Lastly, it would give you an actual use for that little prison cell on your ship. Sure, eventually you will end up letting him out to be a part of your crew, but for the first meeting at least you could have him stuck in that cute little cell, which would be fun.
Now that that is out of the way, I'll move onto the real meat of the post, the big problem I had with the Bounty Hunter story which made an otherwise pretty perfect story fall a bit flat: Belsavis.
Belsavis was such an opportunity for the bounty hunter. It is literally a prison full of the worst scum the Galaxy has to offer. That is a dream for any bounty hunter. Unfortunately, it is by far the weakest part of the story for a few reasons when it should be the strongest. Also, a lot of my ideas for this come from my Weird moment in the Bounty Hunter storyline on Belsavis post from a while ago.
I decided my aims for this part were threefold:
With those three aims in mind, I hope to create a new but similar Belsavis that exemplifies the bounty hunter story while also providing character defining choices that better lead into the finale of the class story.

The Story

The Belsavis story would start the same. You are tasked by Darth Tormen to hunt down Zale Barrows, a Republic hero famed for his daring smuggling antics who now serves as a dangerous prisoner transport. Zale is on Belsavis, having refused to leave when the riot started as he attempts to keep the prisoners he has captured from being freed. Of course, we find this information out along the way and I want to keep the factor that he starts out seeming like a sleazy jerk, but that we learn more about his operation as we go along. I think that's good character building.
However, this is where the first change happens: Skadge is not a total moron. This is the big problem I had with Skadge in the story. He was depicted as being 'the muscle', the enforcer of the group who didn't need to think because he could smash things. The problem is that this character already existed. It's the bounty hunter. You are characterised as the tough guy who can smash their way through whatever. Who needs Skadge to intimidate people when you can already intimidate Sith Lords?
So we're going to change Skadge up a bit. He can still be the grumpy, obnoxious bully we all hate love, but he is now also a Kingpin. He was already supposed to be a high ranking member of Black Sun, so why would he not be running his own gang here on Belsavis?
Back to the story. Zale is able to use the prison to his advantage since he is basically a member of staff. He traps you and gets away, leaving you locked up. That's when you meet Skadge. He frees you and makes you a business offer: he and his gang (we'll call them The Eclipse, as a riff on Black Sun) help you with your 'Zale' problem and in return, you get him off-planet. You aren't in much position to say no, since you're in a cell and Skadge is the only one who can get you out. You agree to the exchange and he frees you and takes you back to his base of operations.
I don't really want to get into the nitty gritty but the two of you go after Zale, with Skadge using his connections on the planet to genuinely help because, another problem with Skadge is that his presence on Belsavis actively makes your job harder. Even when he is trying to help you, he makes things worse. That isn't the case here. You and Skadge are working as a team to hunt Zale down and he is very competent, but using a series of secret tunnels and his own wit, Zale is able to stay ahead.
It's a real game of cat and mouse. On top of that, with Skadge being a more professional character, we can add some darker stuff. Instead of having him just being a dick to Zale's girlfriend, his gang can have her imprisoned and tortured for information. This is the game's chance to make Skadge scary. He isn't just a thug, he's a big deal, which is why he's on Belsavis to begin with. Throughout his actions, we need to make Skadge a real dark character, not just a bully. Making him into a professional killer and not a chaotic stupid goon creates a foil to the light side bounty hunter and an aspiration for a dark side bounty hunter, if we want to follow that simple binary. We'd also learn that Skadge has his own vendetta against Zale since Zale brought him here.
So, we continue on and, eventually, you catch up to Zale in the Tomb and he explains that he doesn't care if he is killed but he wants to keep these prisoners here. What's happened over the story so far is that we've had a perspective shift. At the start of Belsavis, Skadge is our ally and Zale is our enemy. However, as we go through,our perception of Zale goes from that of a scumbag to an honourable lawman, while our perspective of Skadge goes from being a business partner to a dangerous monster. You are then given the choice: help Zale fight the Imperial task force and prevent his prisoners from being freed, for which he promises to give himself up willingly, or help Skadge get his revenge, get your own bounty and help out the Empire along the way. If you help the imperials, Zale is badly injured and you decide whether to freeze him, kill him or let Skadge have his way with him, basically the same as the original story.
However, if you choose to help Zale, you fight off the Imperial task force alongside Zale. Skadge would be seperated from the fight. Maybe the bridge retracts and he's left on the other side. Either way, it's just you and Zale vs the Imperials. You fight them off and the bridge comes back. Zale honours his bargain and gives himself up to you. You are then given a choice: kill Zale, capture Zale or recruit Zale. Whatever you choose, Skadge returns with some of his gang members who will take Zale away if you choose to kill or capture him. Skadge informs you that they're taking him to your ship and that Skadge will stick with you 'in search of future business opportunities.' If you choose to recruit Zale, Skadge will be angered that you broke his contract and attack. You kill his gangsters and leave Skadge wounded. However, he makes his escape before you can finish him off and Zale informs you that the two of you need to get off-planet before the prison goes into lockdown again.
There's some precedent for this, as within the Beta, there was the option to aid Zale, which was taken out for whatever reason (because Beta Testers are behind seemingly everything that is wrong with this game). Unfortunately, in that version, Zale still turns on you, which doesn't seem like the character that appeared in game. However, I made a whole rant post about how badly executed this whole segment was, giving you three different options to deny Zale's perfectly reasonable deal.
While I think my second and third aims are met by this change, I still have my first aim to touch on. This is where I'm going to expand on something that is already in the game.
As you land on Belsavis, either Mako or Torian radios you from the ship, pointing out that there are various bounties on the planet for you to collect. I liked this little bonus objective. It felt very in-line with everything and fit the planet well. However, I think we could do more with it. Rather than just being random characters on the planet, each of them should have their own (very) mini story. I'm talking about a single cutscene each, but enough to characterise them in a satisfying way, something that makes them feel more alive than just little extra objectives. This would be an opportunity to create some fun, zany characters that don't hold up to being main characters but are still memorable from their small appearances.

The Aftermath

So, what would all this change? Well, in terms of the overall story, not much. It would foreshadow your eventual (possible) turn towards the Republic. It would offer a 'light side' alternative to Skadge's 100% dark side and it would make the planetary story flow better. The only issue I could see would be that you could then go through the planetary arc and actually free the Dreadmasters with Zale, the exact thing you helped him stop, but I think we could do something about that.
Otherwise, Skadge has basically no presence in the story outside of Belsavis. He has his conversations, then is completely unnecessary until his Alliance Alert in KotEE, which can still happen since he canonically didn't die and would eventually escape Belsavis by himself. He'd probably be unable to join a hunter that already screwed him over, but that's fine.
Outside of that, we'd have to flesh out Zale through his companion conversations, although his personality is already pretty well executed on Belsavis, and we'd have to alter Skadge's lines to better represent the brutal crime boss aspect of his character.
Finally, as a fun side note; with my changes, you could go through the entire story honouring every contract. The original story forces you to fake Gault's death which always felt very dishonourable to me, but my version has the contract altered in a way that you can still honour it while keeping Gault on your ship. It also adds the contract you make with Skadge, which a light side character who saves Zale would be dishonouring. That adds a fun layer of complexity. Do you turn on Skadge, your 'employer' for the greater good or do you honour the deal you made?
Anyways, those are my thoughts on how the Bounty Hunter story, and particularly Belsavis, could be improved. I'll put in the TL;DR below, even though this is much more manageable than my previous entries.

TL;DR

submitted by Magmas to swtor [link] [comments]

The Tier 1 Tier list

Hello PvZ Heroes Community, It's Reg with the first post on the sub. With the help of u/kevinlel , u/thathappycamper and u/LOVER6868 we have put a lot of time and effort into making the most accurate tier list in our opinions that reflects the current meta. The previous tier list had overrated many cards (B/D molekale & cro mag below pineclone btw) and our goal was to set these errors straight and overrall help the community with the ideal meta crafting guide. Here are the guidelines we followed to make it as comparable to the previous tier list.
Major Changes:
Zombie King D/F -> A/D
Zombie king has arisen in the heroes meta as an extremely viable swarm deck. With decks of the likes of king zoo for neptuna and king zoo-mech king has provided an excellent incentive for a sticky board and grants a massive board swing. The power level of this card was definitely under estimated which is why it got such a major boost in the rating.
Garlic B/D -> A/A
This extremely flexible card has been over looked as many as a block charger with a completely useless silver bullet tech. However this card has proved it self in 2 top tier decks in the likes of vegetation mutation GK and Rings GK. This card is a great card in tempo decks in general due to the fact that it can be used as a 1 mana +1/+5 buff. In tempo this is simply a great card to play in addition to having the added bonus of a 4/4 team-up in rings as well. Provides great board presence and in a deck like vm provides a massive tempo swing when played on heights with another plant.
Vegetation Mutation D/F -> B/C
Another card that enabled the new version of tempo GK to arise, vegetation mutation has proved itself as one of the most efficient buffs in the game. With great environments and with just how easy it is to get value out of this card its efficiency is unmatched. This build around card led to one of the fastest decks in the game which has crazy unexpected damage output due to the face that its normally a +4/+4 in one lane for 2. A very efficient buff in the right deck, however this card is C tier because it doesn't work in anything else.
Red Stinger C/D -> A/B
Yet another sleeper guardian card emerging from seemingly no where, red stinger has become an extremely versatile card that works with what ever game plan or situation you are in. The versatility of the team up with the 2/7 body or the potential 7 damage burst that can be planted behind a plant for extra protection is unrivaled. Against certain classes one form of this card is weakened but the power of this card is in the versatility and you play each mode depending on each situation.
Lima Pleurdon S/S -> A/A
While this card is a very efficient one drop, lima tends to be overrated. A 2/2 amphib is a great play on one but the magic beanstalks rarely ever come into play and after turn 1 this card gets significantly worse. Much can be said about other cards but other cards that are like this are also not rated as highly. Efficient one drop yet severely overrated.
Each card will receive a rating, from S to F, in two categories.
Category 1: Playability How good is the card in the decks it fits in?
S: Best of the best. The card should probably get nerfed in the state it's currently in because it's just that good. You're going to play it all the time in the decks where it works.
A: Very strong. Not something you'd see nerfed, but still a very stong card that you want to play every time.
B: Good. A very strong option in the decks, but it can theoretically be gone without for one reason or another.
C: Decent. It can be worth playing, but there are reasons to drop it as well.
D: Bad. It's really not worth playing, though it at least has some merit one way or the other.
F: Terrible. There's absolutely no reason to play this card. Modifiers: *: This is a tech card, and can move up or down significantly depending on whether or not you run into what it counters a lot. #: This is a budget card, and jumps up significantly if your resources are limited.
Category 2: Flexibility How many decks can this fit in?
S: This is a good option in basically any deck of the class. Top tier crafting material.
A: This is a good option in at least 3 different decks. B: This is a good option in at least 2 different decks
C: This is a build around card that itself enables a deck, but doesn't really fit into anything else.
D: This is a good option in only one deck.
F: This card just doesn't have a deck where it fits in, either because it's just that outclassed by other cards for the deck it wants to be in, or because it wants to be part of a deck that simply doesn't exist.
Be sure to leave a comment with any question or if you disagree with anything.
Without further ado here is the new tier list:

S Flexibility

S - Galacta-Cactus
S - Ketchup Mechanic
S - Space Cowboy
S - Bananasaurus Rex
S - Snapdragon
S - Interstellar Bounty Hunter
A - Quickdraw Con Man
A - Blooming Heart
A - Berry Blast
A - Bonk Choy
A - Apple Saucer

A Flexibility

A - Lima-Pleurodon
A - Going Viral
A - Tricarrotops
A - Black Eyed Pea
A - Jugger-Nut
A - Area 22
A - Line Dancing Zombie
A - Teleportation Zombie
A - Garlic
A - Astrocado
B - Spikeweed Sector
B - Cyborg Zombie
B - Grow-Shroom

B Flexibility

A - Supernova Gargantuar
A - Fire Rooster
A - Corn Dog
A - Moonwalker
A - Split Pea
A - Dark Matter Dragonfruit
A - Black Hole
A - Surprise Gargantuar
A - Bog Of Enlightenment
A - Gatling Pea
A - Disco Dance Floor
A - Haunted Pumpking
A - Imp-Throwing Imp
A - Fishy Imp
A - Red Stinger
B* - Cool Bean
B# - Arm Wrestler
B - Cheese Cutter
B - Teleport
B - Synchronized Swimmer
B - Shamrocket
B - Quasar Wizard
B - Wing-Nut
B - Guacodile
B - Sweet Pea
B - Sportacus
B - Monkey Smuggler
B - Disco-naut
B - Extinction Event
B - Rotobaga
B - Poppin’ Poppies
B - Lil’ Buddy
B - Imposter
B - Pogo Bouncer
B - Zombology Teacher
B - Loudmouth
B - Wormhole Gatekeeper
B - Turquoise Skull Zombie
B - Shellery
C - Exploding Fruitcake
C - Lurch For Lunch
C - Regifting Zombie
C - Landscaper

C Flexibility (Enables Decks)

A - Onion Rings
A - Headstone Carver
A - Zombie Coach
A - Zombot Drone Engineer
A - Toxic Waste Imp
A - Captain Flameface
A - Mixed-Up Gravedigger
A - Aerobics Instructor
A - Headhunter
A - Cro-Magnolia
B - Gadget Scientist
B - Astro-Shroom
B - Imitater
B - Three-Nut
B - Team Mascot Zombie
B - Neutron Imp
B - Jurassic Fossilhead
B - Excavator Zombie
B - Savage Spinach
B - Jelly Bean
B - Vegetation Mutation
C - Cat Lady
C - Zookeeper
C - Valkyrie
C - Gloom-Shroom
D - Gargantuar Mime
D - Marine Bean
D - Strawberrian
D - Sergeant Strongberry
D - Trickster
D - Potted Powerhouse
D - Flamenco Zombie
D - Gargantuar-Throwing Gargantuar
D - Punish-Shroom
F - Go-Nuts

D Flexibility

A - Raiding Raptor
A - Zombie King
B - Shroom For Two
B - Forget-Me-Nuts
B - Rocket Science
B - Hail-a-Copter
B - Clique Peas
B - Bungee Plumber
B - Primal Sunflower
B - Twin Sunflower
B - Cryo-Yeti
B - Knockout
B - Wild Berry
B - Zapricot
B - Veloci-Radish Hunter
B - Primeval Yeti
B - All-Star Zombie
B - Parasol Zombie
B - Unlife Of The Party
B - Moon Base Z
B - Zombot Battlecruiser
B - Chimney Sweep
B - Snake Grass
C* - Weed Spray
C# - Rolling Stone
C# - Plant Food
C# - Fire Peashooter
C# - Healthy Treat
C# - Magnifying Grass
C - Hover-Goat 3000
C - Kitchen Sink Zombie
C - Apotatosaurus
C - Laser Cattail
C - Bird Of Paradise
C - Pear Cub
C - Ancient Vimpire
C - Sonic Bloom
C - Cosmic Sports Star
C - Cob Cannon
C - Grave Robber
C - Trapper Zombie
C - Rescue Radish
D# - Beam Me Up
D# - Rodeo Gargantuar
D# - Morning Glory
D# - Bloomerang
D# - Kite Flyer
D# - Smoke Bomb
D - Zombie Yeti
D - Mondo Bronto
D - Fun-Dead Raiser
D - Planetary Gladiator
D - Eyespore
D - Primal Wall-Nut
D - Nibble
D - Banana Bomb
D - Leprechaun Imp
D - Intergalactic Warlord
D - Cursed Gargolith
D - Mustache Monument
D - Muscle Sprout
D - Killer Whale
D - Banana Peel
D - Wall-Nut
D - Sage Sage
D - Admiral Navy Bean
D - Disco Zombie
D - Undying Pharaoh

F Flexibility

B*# - Blockbuster
C# - Plantern
C# - Alien Ooze
C# - Mars Flytrap
C - Health-Nut
C - Banana Launcher
D*# - Primal Peashooter
D# - Sting Bean
D# - Tricorn
D# - Tough Beets
D# - Pea Pod
D# - Pea Patch
D# - Power Flower
D# - Graveyard
D# - Pea-Nut
D# - Snorkel Zombie
D# - Total Eclipse
D# - Surfer Zombie
D# - Poison Mushroom
D# - Poison Ivy
D# - Cosmic Scientist
D# - Pool Shark
D# - Skyshooter
D# - Cosmoss
D# - Space Pirate
D# - Stealthy Imp
D# - Mystery Egg
D# - Sugary Treat
D - Brain Vendor
D - Spyris
D - Brainana
D - Gargologist
D - Podfather
D - Imp Commander
D - High Voltage Currant
D - Barrel of Deadbeards
D - Hot Date
D - Goat
D - Fraidy Cat
D - Puff-Shroom
D - Interdimensional Zombie
D - Final Mission
D - Tanklyosaurus
D - Binary Stars
D - Defensive End
D - Briar Rose
D - Ducky Tube Zombie
D - Primal Potato Mine
D - Body Gourd
D - Loco Coco
D - Dog Walker
D - Biodome Botanist
D - Energy Drink Zombie
D - Vimpire
D - Primordial Cheese Shover
D - Buff-Shroom
D - Fireweed
D - Shelf Mushroom
D - Grapes Of Wrath
D - Lily Of The Valley
D - Flourish
D - Moonbean
D - Space Ninja
D - Leaf Blower
D - Shooting Starfruit
D - Cosmic Flower
D - Sunflower Seed
D - Whack-a-Zombie
D - Aloesaurus
D - Barrel of Barrels
D - Laser Base Alpha
D - Smelly Zombie
D - Unthawed Viking
D - Zombot Sharktronic Sub
D - Grape Responsibility
D - Smackadamia
D - Gravitree
D - Soul Patch
D - Secret Agent
D - Haunting Zombie
D - Pied Piper
D - Whipvine
D - Jester
D - Zombot’s Wrath
D - The Chickening
D - Solar Winds
D - Metal Petal Sunflower
D - Swashbuckler Zombie
D - Party Thyme
D - Gas Giant
D - Pumpkin Shell
D - Steel Magnolia
D - Transfiguration
D - Mustache Waxer
D - Duckstache
D - Trick-or-Treater
D - Mad Chemist
D - Shieldcrusher Viking
D - Half Banana
D - Typical Beanstalk
D - Banana Split
D - Frankentuar
D - Potato Mine
D - Vitamin Z
D - Overstuffed Zombie
D - Reincarnation
D - Cosmic Mushroom
D - Evolutionary Leap
D - Electrician
D - Wizard Gargantuar
D - Gizzard Lizard
D - Stupid Cupid
D - Hippity Hop Gargantuar
D - Spring Bean
D - Vanilla
D - Navy Bean
D - Threepeater
D - Coffee Zombie
D - Pepper M.D.
D - Tactical Cuke
D - Three Headed Chomper
D - Swabbie
D - Backyard Bounce
D - Zombie High Diver
D - Laser Bean
D - Blowgun Imp
F# - Pismashio
F# - Loose Cannon
F# - Cattail
F - Grave Buster
F - Veloci-Radish Hatchling
F - Cosmic Nut
F - Buried Treasure
F - Squirrel Herder
F - Sneezing Zombie
F - Umbrella Leaf
F - Mini-Ninja
F - Pineclone
F - Wall-Nut Bowling
F - Maniacal Laugh
F - Molekale
F - Fireworks Zombie
F - Photosynthesizer
F - Doom-Shroom
F - Cosmic Yeti
F - Mushroom Grotto
F - Pear Pairadise
F - Zombot Dinotronic Mechasaur
F - Torchwood
F - Zombie Middle Manager
F - Escape Through Time
F - Stompadon
F - Toadstool
F - Cactus
F - Mirror-Nut
F - Locust Swarm
F - Nurse Gargantuar
F - Sour Grapes
F - Bluesberry
F - Gentleman Zombie
F - Medulla Nebula
F - Super-Phat Beets
F - Tennis Champ
F - Unexpected Gifts
F - Cosmic Dancer
F - Gargantuar’s Feast
F - Grave Mistake
F - Winter Melon
F - The Great Zucchini
F - Camel Crossing
F - Medic
F - Water Chestnut
F - Force Field
F - Starch-Lord
F - Hibernating Beary
F - Deep Sea Gargantuar
F - Invasive Species
F - Dandy Lion King
F - Yeti Lunchbox
F - Hot Lava
F - Paparazzi Zombie
F - Transformation Station
F - Portal Technicitian
F - Bad Moon Rising
F - Coffee Grounds
F - Re-Peat Moss
F - Pod Fighter
F - Trapper Territory
F - Cuckoo Zombie
F - Newspaper Zombie
F - Abravadaver
F - Iceberg Lettuce
F - Snowdrop
F - Chilly Pepper
F - Mayflower
F - Winter Squash
F - Jumping Bean
F - Melon-Pult
F - Threepeater
F - Kernel-Pult
F - Heartichoke
F - Venus Flytraplanet
F - Squash
F - Cornucopia
F - Zombot Aerostatic Gondola
F - Cone Zone
F - Small-Nut
F - Gardening Gloves
F - Sea Shroom
F - Spineapple
F - Prickly Pear
F - Grizzly Pear
F - Skunk Punk
F - Haunting Ghost
F - Dolphin Rider
F - B-flat
F - Kangaroo Rider
F - Smashing Gargantuar
F - Vengeful Cyborg
F - King of The Grill
F - Octo Zombie
F - Zombot 1000
F - Button Mushroom
F - Seedling
F - Berry Angry
F - Mushroom Ringleader
F - Pair of Pears
F - Petal-morphasis
F - Atomic Bombegranite
F - Electric Blueberry
F - Lava Guava
F - Sizzle
F - Cherry Bomb
F - Poison Oak
F - Kernel Corn
F - Cardboard Robot
F - Cellphone Zombie
F - Cryo Brain
F - Zomblob
F - Drum Major
F - Mountain Climber
F - Triplication
F - Copter Commando
F - Pirate’s Booty
F - Peashooter
F - Sweet Potato
F - Cabbage Pult
F - Cosmic Pea
F - Fertilizer
F - Grape Power
F - Repeater
F - Plucky Clover
F - The Red Plant-it
F - Bamboozle
F - Espresso Fiesta
F - Backup Dancer
F - Conga Zombie
F - Meteor Z
F - Exploding Imp
F - Cakesplosion
F - Orchestra Conductor
F - Foot Soldier
F - Gargantuar-throwing Imp
F - Imp-throwing Gargantuar
F - Disco-tron 3000
F - Lily Pad
F - Weenie Beanie
F - Lighting Reed
F - Pear Pal
F - Snow Pea
F - Sow Magic Beans
F - Planet of the Grapes
F - Bean Counter
F - Carrotillery
F - Witch Hazel
F - Jolly Holly
F - Smoosh-shroom
F - Baseball Zombie
F - Cone Zone
F - Conehead Zombie
F - Leftovers
F - Terrify
F - Turkey Rider
F - Celestial Custodian
F - Lost Colosseum
F - Trash Can Zombie
F - Bonus Track Buckethead
F - Buckethead
F - Chump Champion
F - Monster Mash
F - Screen Door Zombie
F - Ra Zombie
F - Knight of the Living Dead
F - Wannabe Hero
F - Bellflower
F - Sunflower
F - Fume Shroom
F - Sun-shroom
F - Water Balloons
F - 2nd-Best Taco of All Time
F - Jack o’ Lantern
F - Mixed Nuts
F - Sunnier Shroom
F - Venus Flytrap
F - Chomper
F - Lawnmower
F - Sunstrike
F - Smashing Pumpkin
F - Astro Vera
F - Imp
F - Zombie Chicken
F - Dr. Spacetime
F - Hot Dog Imp
F - Cosmic Imp
F - Barrel Roller Zombie
F - Firefighter
F - Tomb Raiser
F - Walrus Rider
F - Zombot Stomp
F - Thinking Cap
Thanks For Reading And Happy Crafting!
submitted by Theregster_111 to PvZHeroes [link] [comments]

Trade Binary Options With 100% Accuracy With A Killer Secret  BinaryOptionsSecret  SuperOptions How to trade Killer shoot strategy ? BinaryOptionsSecret - YouTube Binary options secrets - trade binary options with 100% accuracy with a killer secret 100% WIN Strategy 2019 - Binary options Killer Strategy Perfect Binary Option Strategy 5 Minutes Winning Strategy - Urdu Hindi

Crisis Killer is generally a binary options trading software application that is designed to help traders win and forecast the market trends with binary options. The software likewise offers analyses of the market conditions so that traders can understand exactly what should be your next step. It offers different secret techniques that eventually helps. traders without making use of any ... Binary options secrets – 2015 – 12; Binary Options – 5 minutes Strategy Review ( HOW I GET $8257 In First Month! ) Auto Binary Signals Real Review 2016 – Make $386 in 10 Minutes; Directional Movement Index Binary Options Indicator new; Binary Options Signals Indicator 60 Second 90% Accurate Signals! Binary Options – My secret Strategy Review ( HOW I GET $15259 In First Month ... Binary Options Secrets: A Killer Strategy Never Seen Before On Internet Is Now Revealed. This Is A Logical Method That Will Surprise You. Guaranteed "How We Stumbled Onto Simple And Logical Binary Options Secret Behind Most Profitable Traders That Can Give Anyone Unbelievable Profits With More Than 95% Accuracy " No MT4 use at all, No indicators, No martingale (increase % per lost trade) No ... Binary.com is the premier trading platform for binary options on all financial markets. Trade Forex, Indices, Stocks, Commodities and global Sector Indices with trades ranging from 15 seconds up to 365 days. Binary Options Trading Guide. On this page, we will go through the basics of binary options trading. When trading with a binary option robot, you do not necessarily need to know anything about binary options investing, but it is useful to be aware of the mechanism by which option robot operates. Plus, if you are interested in binary options trading so much that you do not want to use the robot ... How To Trade Binary Options Like A Professional is the title of a book that I will like to write in future. I recently started a Youtube Channel about Trading Binary Options, Volatility Indices and Currencies. You probably got to this post after typing a query like How to make money online trading Binary or How to make only trading Boom 1000 Index, Crash 1000 Index, Boom 500 Index or Crash 500 ... Hey guys, back with a new review, this one on Binary Killer a new binary options trading system that seems to be providing us with nothing but a video. Do these sites ever drive me nuts. So, the site consists of strictly a video and an email subscribe form and when you enter your email you are taken to a buy now page where you can buy this software. Binary Options 100% ITM strategy from 1000 to 20000 in 6 min live trading; $1000 to $100k Quest Day2! Best Binary Options 60 sec Trading Strategy! Binary Options 100% ITM strategy with full explanation from 1000 to 20000 in 6 min live trading on; 60 seconds strategy : learn how to trade binary options for a profit beginners Binary options brokers advise to invest not just with courage but also with rational thinking. Fifth, it is essential to keep a clear head while making any decisions about binary options trading. Beginners should avoid trading when they are emotionally disturbed, as emotions can create havoc with your trading. It is very easy to make the wrong decisions in an emotional state, so it is ... Binary Options Secrets: A Killer Strategy Never Seen Before On Internet Is Now Revealed. This Is A Logical Method That Will Surprise You. Guaranteed. Killerbinaryoptionssecret.com: visit the most interesting Killer BINARY OPTIONS SECRET pages, well-liked by users from USA, or check the rest of killerbinaryoptionssecret.com data below. Killerbinaryoptionssecret.com is a web project, safe and ...

[index] [16689] [12132] [3714] [2775] [10352] [24252] [5547] [1607] [15690] [27154]

Trade Binary Options With 100% Accuracy With A Killer Secret BinaryOptionsSecret SuperOptions

The Secret about Binary Options Trading that nobody wants you to Know - Duration: 34:29. ... Binary Options Secret And 98% Accuracy With A Killer Strategy - Duration: 12:55. BinaryOptionsSecret ... The Secret about Binary Options Trading that nobody wants you to Know - Duration: 34:29. ... Binary Options Secret And 98% Accuracy With A Killer Strategy - Duration: 12:55. BinaryOptionsSecret ... Secret Strategy binary.com digit match [Latest Formula] - Duration: 3:57. Smatch Digit 10,953 views. 3:57 . From $1 to $38,785 - Duration: 20:41. SUCCESS BINARY OPTIONS 53,937 views. 20:41 ... Binary Options Secret And 98% Accuracy With A Killer Strategy - Duration: 12 minutes, 55 ... At least is available a free secret binary options tool where you can win almost with a 100% accuracy ... Binary Options Trading System - Live Trading - How To Trade Binary Options Profitably, How To Trade Binary Options Profitably With Binary Options 2015 60 Second Binary Options Strategy - Best 60 ... Make 10 usd Every 50 Seconds Trading Binary Options 100% WINS - Profitable 2018 Trading strategies - Duration: 5:58. Proudly Tech Money General Tips And Tricks 49,800 views 5:58 killer binary option secret no loss binary options indicator most reliable binary options strategy 100 accurate binary options indicator can you get rich from binary options secrets of binary ...

http://arab-binary-option.tranderscom.gq