{"id":378,"date":"2013-09-10T18:54:55","date_gmt":"2013-09-10T23:54:55","guid":{"rendered":"http:\/\/nslotnick.com\/?p=378"},"modified":"2014-09-08T02:26:46","modified_gmt":"2014-09-08T07:26:46","slug":"never-again","status":"publish","type":"post","link":"http:\/\/nslotnick.com\/?p=378","title":{"rendered":"Never Again"},"content":{"rendered":"<p><iframe loading=\"lazy\" src=\"\/\/www.youtube.com\/embed\/p_W9w-atNEo?rel=0\" height=\"480\" width=\"835\" allowfullscreen=\"\" frameborder=\"0\"><\/iframe><\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"300\">Summary<\/p>\n<ul>\n<li>Name: Never Again<\/li>\n<li>Development Time: 160 hours<\/li>\n<li>Genre: RPG<\/li>\n<li>Playtime: 10-15 minutes<\/li>\n<li>Engine: Creation Kit<\/li>\n<\/ul>\n<p>&nbsp;<\/td>\n<td style=\"text-align: center;\" width=\"300\">Download<br \/>\n<a href=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/10\/Never-Again.zip\" class=\"button orange \" target=\"_\"><span>.zip File<\/span><\/a><\/td>\n<td width=\"300\">Design Goals<\/p>\n<ul>\n<li>Design a quest that works within the lore of the Elder Scrolls Universe<\/li>\n<li>Create at least one reusable script<\/li>\n<li>Script a boss level power<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: center;\">Tasked with stopping another Oblivion Crisis before it starts, Never Again has the player hunting down the servant of a would be Daedric Price and ending this threat to Cyrodiil.<\/p>\n<h3 class=\"trigger toggle-white\"><a href=\"#\">Layout and Design: The Abandoned Home<\/a><\/h3><div class=\"toggle_container\">\n<p style=\"text-align: center;\"><a href=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/abandonedhomemap.jpg\" rel=\"lightbox[378]\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-724\" alt=\"abandoned home map\" src=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/abandonedhomemap.jpg\" width=\"606\" height=\"485\" srcset=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/abandonedhomemap.jpg 866w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/abandonedhomemap-300x240.jpg 300w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/abandonedhomemap-530x424.jpg 530w\" sizes=\"auto, (max-width: 606px) 100vw, 606px\" \/><\/a><\/p>\n<h3>Walkthrough<\/h3>\n<ol>\n<li>Directed here by a quest giver at Riverwood Bridge, the player enters an abandoned home, cobwebs and dust are all that live here. They are searching for clues as to the whereabouts of a spell caster in league with a Daedric Prince.<\/li>\n<li>A secret underground basement shows light use, cobwebs are still present but fewer in number. Still no combat by this point.<\/li>\n<li>A strange room with a bloody archway is the most obvious thing in the room. Sets of bloody rag litter the room. Across from the archway is a small work area with books and arcane tools. A journal here progresses the quest and give the player a bit of back story and a way forward, head to a crypt and acquire a sigil stone to open the portal into Oblivion. After acquiring the journal the portal opens and out comes a (D)aedra which then attacks the player. The portal isn&#8217;t working yet on this end, the player needs a sigil stone to affect transportation.<\/li>\n<\/ol>\n<h3>Design Goals<\/h3>\n<ul>\n<li>Start the quest with some exploration and light combat to get the player warmed up<\/li>\n<li>Foreshadow the players trip to the Bloodrealm within the abandoned home<\/li>\n<\/ul>\n<p><\/div><h3 class=\"trigger toggle-gray\"><a href=\"#\">Layout and Design: The Desecrated Crypt<\/a><\/h3><div class=\"toggle_container\"><\/p>\n<p style=\"text-align: center;\">\u00a0<a href=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/Cryptmap.jpg\" rel=\"lightbox[378]\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-725\" alt=\"Crypt map\" src=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/Cryptmap.jpg\" width=\"672\" height=\"485\" srcset=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/Cryptmap.jpg 960w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/Cryptmap-300x216.jpg 300w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/Cryptmap-530x382.jpg 530w\" sizes=\"auto, (max-width: 672px) 100vw, 672px\" \/><\/a><\/p>\n<h3>Walkthrough<\/h3>\n<ol>\n<li>The entrance to this area serves as a safe starting point. Cobwebs cover the path deeper into the crypt, are intact and break when the player walks through them.<\/li>\n<li>The large room here has the standard enemies you&#8217;d expect; (s)keletons and (d)rauger. Skeletons attack immediately and the drauger wait until triggered by the blue trigger volumes.<\/li>\n<li>The main interment section of the crypt has a (D)aedra problem, They are searching this area for something when the player arrives. A small group of (d)rauger take\u00a0umbrage to people walking by.<\/li>\n<li>The (D)aedra in this area are searching as well when the player arrives. The daedra are spread between the upper and lower floors, this helps prevent the player from being overwhelmed by numbers. Killing the daedra leaves the path to the Sigil Stone (SS) open. The southern room holds the passage back to the beginning of the level and a quick escape to the next stage.<\/li>\n<\/ol>\n<h3>Design Goals<\/h3>\n<ul>\n<li>Challenge the player with a series of combats<\/li>\n<li>Give the player a chance to get used to their NPC Ally\u2019s combat style<\/li>\n<\/ul>\n<p><\/div><h3 class=\"trigger toggle-white\"><a href=\"#\">Layout and Design: The Bloodrealm, Oblivion<\/a><\/h3><div class=\"toggle_container\"><\/p>\n<h3><a href=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bloodrealmmap.jpg\" rel=\"lightbox[378]\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-726\" alt=\"blood realm map\" src=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bloodrealmmap.jpg\" width=\"606\" height=\"485\" srcset=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bloodrealmmap.jpg 866w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bloodrealmmap-300x240.jpg 300w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bloodrealmmap-530x424.jpg 530w\" sizes=\"auto, (max-width: 606px) 100vw, 606px\" \/><\/a><\/h3>\n<h3>Walkthrough<\/h3>\n<ol>\n<li>After returning to the Abandoned Home, the player steps through the portal in the basement, but now with the sigil stone in hand it takes them into Oblivion. While here in the Bloodrealm of Oblivion the player is constantly being rained on by blood. He starts on an island with bodies floating in the blood ocean. A brief walk towards the main island triggers a bridge to rise up out of the water (see Scripting: Bridge) allowing the player to cross without swimming in blood<\/li>\n<li>Once past the bridge the player is set upon by two (D)aedra, an archer and a melee fighter, who are patrolling the path. Dotting the path on either side are spiked bloody skulls. At the top of the path is a tower that the player climbs and has a rooftop battle with another (D)aedra.<\/li>\n<li>The spikes have given way to stone piles, also adorned with bloody bones.\u00a0 Here two (D)aedra guard the path forward, an archer and a melee fighter.<\/li>\n<li>The staircase takes the player up their final ascension. A (D)aedra spellcaster blocks the path raining spells from above.<\/li>\n<li>The boss fight. Once the player enters the blood soaked castle the object of their search, the mad mage Romani, demands to know how you got here. No matter what the player says they are attacked by Romani. Once Romani is defeated a portal opens nearby to let the player out.<\/li>\n<\/ol>\n<p>The boss fight breaks down as follows:<\/p>\n<ul>\n<li>When Romani starts the fight he summons help in the form of a (D)aedra<\/li>\n<li>When damaged to 66% and then again at 33%:\n<ul>\n<li>a new (D)aedra is spawned into the fight<\/li>\n<li>the (B)oss teleports away from where it last stood to the opposite turret (See Scripting: Boss Teleportation)<\/li>\n<\/ul>\n<\/li>\n<li>Once the boss dies all the summoned daedra still alive disappear<\/li>\n<\/ul>\n<p>These simple mechanics, coupled with Romani&#8217;s selection of ranged spells, make for an interesting fight. You are constantly being double teamed by Romani and his minion, attacking him with magic is difficult (ward spells) and if you go toe to toe with him he will teleport away just as you are starting to do damage. The trick for the player is managing the daedra while dealing with the boss, either by killing them as soon as they spawn or avoiding them and chasing Romani.<\/p>\n<h3>Design Goals<\/h3>\n<ul>\n<li>Give the appearance of blood everywhere<\/li>\n<li>Give the boss a power beyond the player<\/li>\n<li>Make the player feel like they are in Oblivion<\/li>\n<\/ul>\n<p><\/div><h3 class=\"trigger toggle-gray\"><a href=\"#\">Scripting: Bridge<\/a><\/h3><div class=\"toggle_container\">A single reusable script was made to build and collapse the bridge.<br \/>\n\n\t\t<style>\n\t\t\t#gallery-1 {\n\t\t\t\tmargin: auto;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-item {\n\t\t\t\tfloat: left;\n\t\t\t\tmargin-top: 10px;\n\t\t\t\ttext-align: center;\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t\t#gallery-1 img {\n\t\t\t\tborder: 2px solid #cfcfcf;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-caption {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t\t\/* see gallery_shortcode() in wp-includes\/media.php *\/\n\t\t<\/style>\n\t\t<div id='gallery-1' class='gallery galleryid-378 gallery-columns-3 gallery-size-thumbnail'><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-assembled-w-triggers.jpg' rel=\"lightbox[378]\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-assembled-w-triggers-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-550\" srcset=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-assembled-w-triggers-150x150.jpg 150w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-assembled-w-triggers-140x140.jpg 140w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-assembled-w-triggers-50x50.jpg 50w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-assembled-w-triggers-110x110.jpg 110w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-550'>\n\t\t\t\tThe Bridge in its assembled state. The two triggers in red react to the player, controlling the timing of the bridge pieces going up or down. The collision box in yellow is to help the AI pathing.\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-collapsed.jpg' rel=\"lightbox[378]\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-collapsed-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-551\" srcset=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-collapsed-150x150.jpg 150w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-collapsed-140x140.jpg 140w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-collapsed-50x50.jpg 50w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-collapsed-110x110.jpg 110w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-551'>\n\t\t\t\tThe Bridge&#8217;s Collapsed State. Once the Script setup is finished, arranging the destruction is simple.\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-mobile.jpg' rel=\"lightbox[378]\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-mobile-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-552\" srcset=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-mobile-150x150.jpg 150w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-mobile-140x140.jpg 140w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-mobile-50x50.jpg 50w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/bridge-mobile-110x110.jpg 110w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-552'>\n\t\t\t\tThe Moving parts of the bridge hidden deep below the world. The Script is added to each of these components and then pointed at it&#8217;s assembled\/destroyed analogs. The result is every time these pieces are activated they change position.\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/>\n\t\t<\/div>\n<\/p>\n<p><center><iframe loading=\"lazy\" src=\"\/\/www.youtube.com\/embed\/IJdFDIswRcQ?rel=0\" height=\"450\" width=\"800\" allowfullscreen=\"\" frameborder=\"0\"><\/iframe><\/center><\/p>\n\n<div class=\"wp_syntax\"><table><tr><td class=\"line_numbers\"><pre>1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n<\/pre><\/td><td class=\"code\"><pre class=\"lua\" style=\"font-family:monospace;\">Scriptname aaNSBridgeAnimation extends ObjectReference  \n&nbsp;\n<span style=\"color: #66cc66;\">;<\/span>Variables\nObjectReference Property Up  Auto  \nObjectReference Property Down  Auto  \nBool Property IsUp  Auto  \nBool Property doOnce  Auto  \nObjectReference Property NextObj  Auto  \nFloat Property waitDuration  Auto  \n&nbsp;\nEvent OnActivate<span style=\"color: #66cc66;\">&#40;<\/span>ObjectReference akActionRef<span style=\"color: #66cc66;\">&#41;<\/span>\n\t<span style=\"color: #66cc66;\">;<\/span>Transitioning\n\t<span style=\"color: #aa9900; font-weight: bold;\">if<\/span><span style=\"color: #66cc66;\">&#40;<\/span>IsUp <span style=\"color: #66cc66;\">==<\/span> <span style=\"color: #aa9900;\">true<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n&nbsp;\n\t        <span style=\"color: #66cc66;\">;<\/span><span style=\"color: #0000aa;\">debug<\/span><span style=\"color: #66cc66;\">.<\/span>notification<span style=\"color: #66cc66;\">&#40;<\/span>akActionRef <span style=\"color: #66cc66;\">+<\/span> <span style=\"color: #ff6666;\">&quot;Activated me to go Down&quot;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n&nbsp;\n\t\tself<span style=\"color: #66cc66;\">.<\/span>enable<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tUp<span style=\"color: #66cc66;\">.<\/span>disable<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tself<span style=\"color: #66cc66;\">.<\/span>TranslateTo<span style=\"color: #66cc66;\">&#40;<\/span>Down<span style=\"color: #66cc66;\">.<\/span>GetPositionX<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span> Down<span style=\"color: #66cc66;\">.<\/span>GetPositionY<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span> Down<span style=\"color: #66cc66;\">.<\/span>GetPositionZ<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span>Down<span style=\"color: #66cc66;\">.<\/span>GetAngleX<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span>Down<span style=\"color: #66cc66;\">.<\/span>GetAngleY<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span>Down<span style=\"color: #66cc66;\">.<\/span>GetAngleZ<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span> <span style=\"color: #cc66cc;\">500.0<\/span><span style=\"color: #66cc66;\">,<\/span> <span style=\"color: #cc66cc;\">50.0<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tIsUp<span style=\"color: #66cc66;\">=<\/span><span style=\"color: #aa9900;\">false<\/span>\n&nbsp;\n\t\t<span style=\"color: #aa9900; font-weight: bold;\">if<\/span><span style=\"color: #66cc66;\">&#40;<\/span>waitDuration &amp;gt<span style=\"color: #66cc66;\">;<\/span> <span style=\"color: #cc66cc;\">0.0<\/span> <span style=\"color: #66cc66;\">&#41;<\/span>\n\t\t\tutility<span style=\"color: #66cc66;\">.<\/span>wait<span style=\"color: #66cc66;\">&#40;<\/span>waitDuration<span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tendif\n\t<span style=\"color: #aa9900; font-weight: bold;\">else<\/span>\n\t\t<span style=\"color: #66cc66;\">;<\/span><span style=\"color: #0000aa;\">debug<\/span><span style=\"color: #66cc66;\">.<\/span>notification<span style=\"color: #66cc66;\">&#40;<\/span>akActionRef <span style=\"color: #66cc66;\">+<\/span> <span style=\"color: #ff6666;\">&quot;Activated me to go up&quot;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tself<span style=\"color: #66cc66;\">.<\/span>enable<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tDown<span style=\"color: #66cc66;\">.<\/span>disable<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tself<span style=\"color: #66cc66;\">.<\/span>TranslateTo<span style=\"color: #66cc66;\">&#40;<\/span>Up<span style=\"color: #66cc66;\">.<\/span>GetPositionX<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span> Up<span style=\"color: #66cc66;\">.<\/span>GetPositionY<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span> Up<span style=\"color: #66cc66;\">.<\/span>GetPositionZ<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span>Up<span style=\"color: #66cc66;\">.<\/span>GetAngleX<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span>Up<span style=\"color: #66cc66;\">.<\/span>GetAngleY<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span>Up<span style=\"color: #66cc66;\">.<\/span>GetAngleZ<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span> <span style=\"color: #cc66cc;\">500.0<\/span><span style=\"color: #66cc66;\">,<\/span> <span style=\"color: #cc66cc;\">50.0<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tIsUp<span style=\"color: #66cc66;\">=<\/span><span style=\"color: #aa9900;\">true<\/span>\n&nbsp;\n\t\t<span style=\"color: #aa9900; font-weight: bold;\">if<\/span><span style=\"color: #66cc66;\">&#40;<\/span>waitDuration &amp;gt<span style=\"color: #66cc66;\">;<\/span> <span style=\"color: #cc66cc;\">0.0<\/span> <span style=\"color: #66cc66;\">&#41;<\/span>\n\t\t\tutility<span style=\"color: #66cc66;\">.<\/span>wait<span style=\"color: #66cc66;\">&#40;<\/span>waitDuration<span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tendif\n\tendif\nEndEvent\n&nbsp;\nEvent OnTranslationComplete<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t<span style=\"color: #66cc66;\">;<\/span>after moving enable location <span style=\"color: #aa9900; font-weight: bold;\">and<\/span> disable self\n\t<span style=\"color: #aa9900; font-weight: bold;\">if<\/span><span style=\"color: #66cc66;\">&#40;<\/span>IsUp<span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tUp<span style=\"color: #66cc66;\">.<\/span>enable<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tutility<span style=\"color: #66cc66;\">.<\/span>wait<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #cc66cc;\">0.1<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tself<span style=\"color: #66cc66;\">.<\/span>disable<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t<span style=\"color: #aa9900; font-weight: bold;\">elseif<\/span><span style=\"color: #66cc66;\">&#40;<\/span>!IsUp<span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tDown<span style=\"color: #66cc66;\">.<\/span>enable<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tutility<span style=\"color: #66cc66;\">.<\/span>wait<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #cc66cc;\">0.1<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tself<span style=\"color: #66cc66;\">.<\/span>disable<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\tendif\nEndEvent\n&nbsp;\nEvent OnCellLoad<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n        <span style=\"color: #66cc66;\">;<\/span>inital setup\n\tself<span style=\"color: #66cc66;\">.<\/span>TranslateTo<span style=\"color: #66cc66;\">&#40;<\/span>Down<span style=\"color: #66cc66;\">.<\/span>GetPositionX<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span> Down<span style=\"color: #66cc66;\">.<\/span>GetPositionY<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span> Down<span style=\"color: #66cc66;\">.<\/span>GetPositionZ<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span>Down<span style=\"color: #66cc66;\">.<\/span>GetAngleX<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span>Down<span style=\"color: #66cc66;\">.<\/span>GetAngleY<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span>Down<span style=\"color: #66cc66;\">.<\/span>GetAngleZ<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span><span style=\"color: #66cc66;\">,<\/span> <span style=\"color: #cc66cc;\">5000.0<\/span><span style=\"color: #66cc66;\">,<\/span> <span style=\"color: #cc66cc;\">100.0<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\tIsUp<span style=\"color: #66cc66;\">=<\/span><span style=\"color: #aa9900;\">false<\/span>\n\tup<span style=\"color: #66cc66;\">.<\/span>disable<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\tDown<span style=\"color: #66cc66;\">.<\/span>enable<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\tself<span style=\"color: #66cc66;\">.<\/span>disable<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\nEndEvent<\/pre><\/td><\/tr><\/table><\/div>\n\n<p><\/div><\/p>\n<h3 class=\"trigger toggle-white\"><a href=\"#\">Scripting: Boss Teleportation<\/a><\/h3><div class=\"toggle_container\">I wanted the boss of this quest to do something memorable. I thought that if the boss teleported away from the player and was given distance to cast spells it would be a unique way for a spellcaster to get range instead of simply running and turning around. Getting the boss to teleport was easy, but where to teleport him to was not, how am I to know where the boss and player will be fighting? Do I use triggers or a central location to teleport to? Each had its appeal but in the end I went with a mix of these ideas.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/BossTeleport.jpg\" rel=\"lightbox[378]\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-557   aligncenter\" title=\"Boss Fight\" alt=\"I placed an xmarker in the center of the battlefield and one at each landing point. Using the TeleportMe() function, the boss teleports to a landing point on the opposite side of the center mark when the boss had taken enough damage. Each landing point is assigned a name based on its location in relation to the center xmark.\" src=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/BossTeleport.jpg\" width=\"559\" height=\"473\" srcset=\"http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/BossTeleport.jpg 932w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/BossTeleport-300x253.jpg 300w, http:\/\/nslotnick.com\/wp-content\/uploads\/2013\/09\/BossTeleport-530x448.jpg 530w\" sizes=\"auto, (max-width: 559px) 100vw, 559px\" \/><\/a><\/p>\n<p>I placed an xmarker in the center of the battlefield and one at each landing point. Using my custom TeleportMe() function, the boss teleports to a landing point on the opposite side of the center mark when the boss had taken enough damage(at both 66% and 33% health). Each landing point is assigned a name based on its location in relation to the center xmark.<\/p>\n\n<div class=\"wp_syntax\"><table><tr><td class=\"line_numbers\"><pre>1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n<\/pre><\/td><td class=\"code\"><pre class=\"lua\" style=\"font-family:monospace;\">Function TeleportMe<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span> <span style=\"color: #66cc66;\">;<\/span>this <span style=\"color: #aa9900; font-weight: bold;\">function<\/span> is used to teleport the Boss<span style=\"color: #66cc66;\">.<\/span>  \n<span style=\"color: #66cc66;\">;<\/span>The centerMarker should be placed <span style=\"color: #aa9900; font-weight: bold;\">in<\/span> the center of the arena<span style=\"color: #66cc66;\">.<\/span> \t\n        float myX <span style=\"color: #66cc66;\">=<\/span> self<span style=\"color: #66cc66;\">.<\/span>GetPositionX<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n \tfloat myY <span style=\"color: #66cc66;\">=<\/span> self<span style=\"color: #66cc66;\">.<\/span>GetPositionY<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n \tfloat centerX <span style=\"color: #66cc66;\">=<\/span> centerMarker<span style=\"color: #66cc66;\">.<\/span>GetPositionX<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n \tfloat centerY <span style=\"color: #66cc66;\">=<\/span> centerMarker<span style=\"color: #66cc66;\">.<\/span>GetPositionY<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n \tfloat diffX <span style=\"color: #66cc66;\">=<\/span> centerX <span style=\"color: #66cc66;\">-<\/span> myX\n \tfloat diffY <span style=\"color: #66cc66;\">=<\/span> centerY <span style=\"color: #66cc66;\">-<\/span> myY\n \t<span style=\"color: #66cc66;\">;<\/span><span style=\"color: #0000aa;\">debug<\/span><span style=\"color: #66cc66;\">.<\/span>notification<span style=\"color: #66cc66;\">&#40;<\/span><span style=\"color: #ff6666;\">&quot;X:&quot;<\/span> <span style=\"color: #66cc66;\">+<\/span> diffX <span style=\"color: #66cc66;\">+<\/span> <span style=\"color: #ff6666;\">&quot; Y:&quot;<\/span> <span style=\"color: #66cc66;\">+<\/span> diffY <span style=\"color: #66cc66;\">&#41;<\/span>\n        <span style=\"color: #66cc66;\">;<\/span>place the boss <span style=\"color: #aa9900; font-weight: bold;\">in<\/span> the opposite corner from the player\n \t<span style=\"color: #aa9900; font-weight: bold;\">if<\/span><span style=\"color: #66cc66;\">&#40;<\/span>diffX <span style=\"color: #66cc66;\">&lt;<\/span> <span style=\"color: #cc66cc;\">0<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t\t<span style=\"color: #aa9900; font-weight: bold;\">if<\/span><span style=\"color: #66cc66;\">&#40;<\/span>diffY <span style=\"color: #66cc66;\">&lt;<\/span> <span style=\"color: #cc66cc;\">0<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t\t\tself<span style=\"color: #66cc66;\">.<\/span>MoveTo<span style=\"color: #66cc66;\">&#40;<\/span>FrontRight<span style=\"color: #66cc66;\">&#41;<\/span>\n\t\t<span style=\"color: #aa9900; font-weight: bold;\">else<\/span>\n\t\t\tself<span style=\"color: #66cc66;\">.<\/span>MoveTo<span style=\"color: #66cc66;\">&#40;<\/span>BackRight<span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tendIf\n\t<span style=\"color: #aa9900; font-weight: bold;\">else<\/span>\n\t\t<span style=\"color: #aa9900; font-weight: bold;\">if<\/span><span style=\"color: #66cc66;\">&#40;<\/span>diffY <span style=\"color: #66cc66;\">&lt;<\/span> <span style=\"color: #cc66cc;\">0<\/span><span style=\"color: #66cc66;\">&#41;<\/span>\n\t\t\tself<span style=\"color: #66cc66;\">.<\/span>MoveTo<span style=\"color: #66cc66;\">&#40;<\/span>FrontLeft<span style=\"color: #66cc66;\">&#41;<\/span>\n\t\t<span style=\"color: #aa9900; font-weight: bold;\">else<\/span>\n                        self<span style=\"color: #66cc66;\">.<\/span>MoveTo<span style=\"color: #66cc66;\">&#40;<\/span>BackLeft<span style=\"color: #66cc66;\">&#41;<\/span>\n\t\tendIf\n\tendIf\nEndFunction<\/pre><\/td><\/tr><\/table><\/div>\n\n<p><\/div>\n<h3 class=\"trigger toggle-gray\"><a href=\"#\">Full Playthrough<\/a><\/h3><div class=\"toggle_container\"><br \/>\n<iframe loading=\"lazy\" src=\"\/\/www.youtube.com\/embed\/lZkazVyZN5c?rel=0\" height=\"480\" width=\"835\" allowfullscreen=\"\" frameborder=\"0\"><\/iframe><br \/>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summary Name: Never Again Development Time: 160 hours Genre: RPG Playtime: 10-15 minutes Engine: Creation Kit &nbsp; Download Design Goals Design a quest that works within the lore of the Elder Scrolls Universe Create at least one reusable script Script a boss level power Tasked with stopping another Oblivion Crisis&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18,19],"tags":[],"class_list":["post-378","post","type-post","status-publish","format-standard","hentry","category-design","category-individual"],"_links":{"self":[{"href":"http:\/\/nslotnick.com\/index.php?rest_route=\/wp\/v2\/posts\/378","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/nslotnick.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/nslotnick.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/nslotnick.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/nslotnick.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=378"}],"version-history":[{"count":106,"href":"http:\/\/nslotnick.com\/index.php?rest_route=\/wp\/v2\/posts\/378\/revisions"}],"predecessor-version":[{"id":819,"href":"http:\/\/nslotnick.com\/index.php?rest_route=\/wp\/v2\/posts\/378\/revisions\/819"}],"wp:attachment":[{"href":"http:\/\/nslotnick.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=378"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/nslotnick.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=378"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/nslotnick.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}