diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..d8a835dc --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +**/__Source \ No newline at end of file diff --git a/about/about.css b/about/about.css new file mode 100644 index 00000000..878cc41a --- /dev/null +++ b/about/about.css @@ -0,0 +1 @@ +@import url("/main.css"); \ No newline at end of file diff --git a/about/index.html b/about/index.html new file mode 100644 index 00000000..3cf4b905 --- /dev/null +++ b/about/index.html @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + About | Leilukin's Hub + + + +
+
+ +
+ +
+ + + +
+

About

+ +

The Site

+ a website button with Penelope the cat, the mascot of Neocities, and the text "hosted by neocities" + +

This website serves as a personal hub for my interests and my own corner on the internet outside social media platforms.

+ +

On this site, you can find various stuff and resources I have created or compiled, as well as articles dedicated to my interests.

+ +

The Site Owner

+
+ +
+ +

You can call me Leilukin. I am a Malaysian Chinese non-binary lesbian born in the early 90s. My pronouns are they/she/他/她.

+ +

This website serves as a personal hub for gathering various stuff and resources I have created or compiled.

+ +

I speak Mandarin, English, Cantonese and Malay, though I am most fluent in Mandarin and English.

+ +

Social media platforms you can find me on:
+ Tumblr | + YouTube | + Twitter | + Mastodon | + Mastodon (for gaming) | + Instagram +

+

However, I am most active on Tumblr, so if you want to interact with me on a social media platform, Tumblr would be the best option.

+ +

I also have media catalogues online on the following platforms:
+ Steam | + Backloggd | + Goodreads | + The StoryGraph | + Letterboxd | + Serializd +

+ +

You can contact me via email: leilukin@outlook.com.

+ +

If you enjoy my work, you can support me on Ko-Fi or Buy Me a Coffee: +

+ +

+ +
+ +
+ +
+ + \ No newline at end of file diff --git a/articles/articles.css b/articles/articles.css new file mode 100644 index 00000000..878cc41a --- /dev/null +++ b/articles/articles.css @@ -0,0 +1 @@ +@import url("/main.css"); \ No newline at end of file diff --git a/articles/index.html b/articles/index.html new file mode 100644 index 00000000..59d5ec02 --- /dev/null +++ b/articles/index.html @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + Articles | Leilukin's Hub + + + +
+
+ +
+ +
+ + + +
+

Articles

+
+ +
+ +
+ + \ No newline at end of file diff --git a/assets/Leilukins-Hub-website-banner.png b/assets/Leilukins-Hub-website-banner.png new file mode 100644 index 00000000..a9506d66 Binary files /dev/null and b/assets/Leilukins-Hub-website-banner.png differ diff --git a/assets/arrow-list.png b/assets/arrow-list.png new file mode 100644 index 00000000..033259af Binary files /dev/null and b/assets/arrow-list.png differ diff --git a/assets/favicon/android-chrome-192x192.png b/assets/favicon/android-chrome-192x192.png new file mode 100644 index 00000000..65096d8a Binary files /dev/null and b/assets/favicon/android-chrome-192x192.png differ diff --git a/assets/favicon/android-chrome-512x512.png b/assets/favicon/android-chrome-512x512.png new file mode 100644 index 00000000..a36d4d55 Binary files /dev/null and b/assets/favicon/android-chrome-512x512.png differ diff --git a/assets/favicon/apple-touch-icon.png b/assets/favicon/apple-touch-icon.png new file mode 100644 index 00000000..81ef2aee Binary files /dev/null and b/assets/favicon/apple-touch-icon.png differ diff --git a/assets/favicon/favicon-16x16.png b/assets/favicon/favicon-16x16.png new file mode 100644 index 00000000..8f3d69c8 Binary files /dev/null and b/assets/favicon/favicon-16x16.png differ diff --git a/assets/favicon/favicon-32x32.png b/assets/favicon/favicon-32x32.png new file mode 100644 index 00000000..196961ba Binary files /dev/null and b/assets/favicon/favicon-32x32.png differ diff --git a/assets/favicon/favicon.ico b/assets/favicon/favicon.ico new file mode 100644 index 00000000..425bbd1c Binary files /dev/null and b/assets/favicon/favicon.ico differ diff --git a/assets/favicon/site.webmanifest b/assets/favicon/site.webmanifest new file mode 100644 index 00000000..5ed1a905 --- /dev/null +++ b/assets/favicon/site.webmanifest @@ -0,0 +1,20 @@ +{ + "name": "Leilukin's Hub", + "short_name": "Leilukin's Hub", + "icons": + [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#7A37A3", + "background_color": "#000000", + "display": "standalone" +} \ No newline at end of file diff --git a/assets/fonts/Nunito-Italic-VariableFont_wght.ttf b/assets/fonts/Nunito-Italic-VariableFont_wght.ttf new file mode 100644 index 00000000..6a58fbfd Binary files /dev/null and b/assets/fonts/Nunito-Italic-VariableFont_wght.ttf differ diff --git a/assets/fonts/Nunito-VariableFont_wght.ttf b/assets/fonts/Nunito-VariableFont_wght.ttf new file mode 100644 index 00000000..87c50a8b Binary files /dev/null and b/assets/fonts/Nunito-VariableFont_wght.ttf differ diff --git a/assets/hosted-by-neocities.png b/assets/hosted-by-neocities.png new file mode 100644 index 00000000..73e6030a Binary files /dev/null and b/assets/hosted-by-neocities.png differ diff --git a/assets/leilukin-bee.png b/assets/leilukin-bee.png new file mode 100644 index 00000000..c2317a7b Binary files /dev/null and b/assets/leilukin-bee.png differ diff --git a/assets/starsforever.gif b/assets/starsforever.gif new file mode 100644 index 00000000..22e7b578 Binary files /dev/null and b/assets/starsforever.gif differ diff --git a/blog/archive.html b/blog/archive.html new file mode 100644 index 00000000..bc363ccf --- /dev/null +++ b/blog/archive.html @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + Blog Archive | Leilukin's Hub + + +
+ +
+

Blog Archive

+
+
+ +
+ + \ No newline at end of file diff --git a/blog/blog.css b/blog/blog.css new file mode 100644 index 00000000..aa1b379a --- /dev/null +++ b/blog/blog.css @@ -0,0 +1,186 @@ +@font-face { + font-family: 'Nunito'; + src: url('/assets/fonts/Nunito-VariableFont_wght.ttf') format("truetype"); + font-weight: 125 950; + font-stretch: 75% 125%; + font-style: normal; +} + +@font-face { + font-family: 'Nunito'; + src: url('/assets/fonts/Nunito-Italic-VariableFont_wght.ttf') format("truetype"); + font-weight: 125 950; + font-stretch: 75% 125%; + font-style: italic; +} + +body { + background-color: black; + background-image: url('./img/bg_fingerlessGloves.png'); + background-position: top; + background-repeat: repeat-x; + background-attachment: fixed; + font-size: 18px; + font-family: 'Nunito', Arial, sans-serif; + margin: 0; +} + +p { + line-height: 1.6em; +} + +strong { + color: #5fc7cd; +} + +img { + max-width: 100%; + height: auto; + margin-top: 0.5em; + margin-bottom: 0.5em; +} + +.right { + float: right; + margin-left: 1em; +} + +.left { + float: left; + margin-right: 1em; +} + +.center { + display: block; + margin-right: auto; + margin-left: auto; + text-align: center; +} + +@media only screen and (min-width: 600px) { + .small { + max-width: 60%; + height: auto; + } +} + +.caption { + margin-top: 0; + font-size: 0.9em; + font-style: italic; +} + +a { + color: #ffc000; +} + +a:hover { + background-color: #34220b; +} + +h1, h2, h3, h4, h5 { + color: #5fc7cd; +} + +hr { + border-width: 2px 0 0 0; + border-style: dashed; + border-color: #a3bdc4; +} + +/*#CONTAINER is the rectangle that has contains everything but the background!*/ +#container { + margin: 3em auto; + width: 90%; + max-width: 900px; + background-color: black; + color: #dddddd; + outline-color: #425e74; + outline-style: ridge; + outline-width: 8px; + outline-offset: 0; +} + +#content { + padding: 10px 5% 20px 5%; +} + + +/*HEADER STYLE*/ +#header { + background-color: black; + padding: 0 5%; +} + +#header ul { + display: inline-block; + list-style-type: none; + padding: 0; + margin-bottom: 1em; + margin-top: 1em; +} + +#header li { + font-size: 1.2em; + display: inline-block; + margin-right: 0.2em; + margin-bottom: 0.8em; + margin-top: 0.8em; +} + +#header li a { + color: #443; + background-color: #b6b59e; + border-width: 0.3em; + border-style: outset; + border-color: #86866d; + padding: 0.3em 1.5em 0.2em 0.5em; + text-decoration: none; + font-weight: 900; +} + +#header li a:hover { + background-color: #ceccaa; + border-color: #98987d; +} + +#header li a:active { + background-color: #8e8d74; + border-color: #71715c; + color: black; +} + +/*POST LIST STYLE*/ +#postlistdiv ul { + font-size: 1.2em; + padding: 0; + list-style-type: none; +} + +#recentpostlistdiv ul { + font-size: 1.2em; + padding: 0; + list-style-type: none; +} + +.moreposts { + font-size: 0.8em; + margin-top: 0.2em; +} + +/*NEXT AND PREVIOUS LINKS STYLE*/ +#nextprev { + text-align: center; + margin-top: 1.4em; +} + +/*DISQUS STYLE*/ +#disqus_thread { + margin-top: 1.6em; +} + +/*FOOTER STYLE*/ +#footer { + font-size: 0.8em; + padding: 0 5% 10px 5%; +} \ No newline at end of file diff --git a/blog/blog.js b/blog/blog.js new file mode 100644 index 00000000..7ee52239 --- /dev/null +++ b/blog/blog.js @@ -0,0 +1,224 @@ +/*Welcome to the script file! Your 1st time here, you should update + the basic info section to include your name and website/social + media link (if desired). Most of the time, you will just come + here to update the posts array. However, you can also edit or + add your own scripts to do whatever you like!*/ + +//TABLE OF CONTENTS + // 1. Basic Info + // 2. Posts Array + // 3. Creating HTML Sections to Be Inserted (Header, Footer, etc) + // 4. Inserting the Sections Into our Actual HTML Pages + +//----------------------------- + +//==[ 1. BASIC INFO ]== + +let blogName = "Leilukin's Blog"; +let authorName = "Leilukin"; +let authorLink = "https://leilukin.neocities.org/"; // Enter your website, social media, etc. Some way for people to tell you they like your blog! (Leaving it empty is okay too) + +//----------------------------- + +//==[ 2. POSTS ARRAY ]== + +/*Each time you make a new post, add the filepath here at the top of postsArray. + This will cause all the right links to appear and work. + NOTE: It's important to follow this exact naming convention, because the scripts + below are expecting it ( 'posts/YYYY-MM-DD-Title-of-Your-Post.html', ). You can + alter the scripts if you want to use a different naming convention*/ +/*UPDATE: as of version 1.3, you may omit the date if you would like. But if you + use a date it must still follow that format.*/ + +let postsArray = [ + [ "posts/2023-05-09-Onboard-the-Dracula-Daily-Hype-Train.html" ], + [ "posts/2023-01-28-Leilukins-Hub-Now-Has-a-Blog.html", encodeURI( `Leilukin's Hub Now Has a Blog!` ) ] +//[ "posts/2020-11-10-Special-Characters-Example.html", encodeURI( 'Spéci@l "Character\'s" Examp|e' ) ], +//[ "posts/2020-11-10-Post-Template.html" ] +]; + +//----------------------------- + +//==[ 3. CREATING HTML SECTIONS TO BE INSERTED ]== + +let url = window.location.pathname; + +//The date format to look for is 4 digits, hyphen, 2 digits, hyphen, 2 digits, hyphen. +const postDateFormat = /\d{4}\-\d{2}\-\d{2}\-/; + +//Check if you are in posts (if so, the links will have to go up a directory) +let relativePath = "."; +if ( url.includes("posts/") ) { + relativePath = ".."; +} + +//Variable for my main site URL +const mainSiteURL = "/home.html"; + +//Write the Header HTML, a series of list items containing links. +let headerHTML = ''; + +//Write the Footer HTML, which has information about the blog. +let footerHTML = "

" + blogName + " is written by " + authorName + ", built with Zonelets.

"; + +//To do the following stuff, we want to know where we are in the posts array (if we're currently on a post page). +let currentIndex = -1; +let currentFilename = url.substring(url.lastIndexOf('posts/')); +//Depending on the web server settings (Or something?), the browser url may or may not have ".html" at the end. If not, we must add it back in to match the posts array. (12-19-2022 fix) +if ( ! currentFilename.endsWith(".html") ) { + currentFilename += ".html"; +} +let i; +for (i = 0; i < postsArray.length; i++) { + if ( postsArray[i][0] === currentFilename ) { + currentIndex = i; + } +} + +//Convert the post url to readable post name. E.g. changes "2020-10-10-My-First-Post.html" to "My First Post" +//Or pass along the "special characters" version of the title if one exists +function formatPostTitle(i) { + // Check if there is an alternate post title + if ( postsArray[i].length > 1 ) { + //Remember how we had to use encodeURI for special characters up above? Now we use decodeURI to get them back. + return decodeURI(postsArray[i][1]); + } else { + //If there is no alternate post title, check if the post uses the date format or not, and return the proper title + if ( postDateFormat.test ( postsArray[i][0].slice( 6,17 ) ) ) { + return postsArray[i][0].slice(17,-5).replace(/-/g," "); + } else { + return postsArray[i][0].slice(6,-5).replace(/-/g," "); + } + } +} + +//Get the current post title and date (if we are on a post page) +let currentPostTitle = ""; +let niceDate = ""; +if ( currentIndex > -1 ) { + currentPostTitle = formatPostTitle( currentIndex ); + //Generate the "nice to read" version of date + if ( postDateFormat.test ( postsArray[currentIndex][0].slice( 6,17 ) ) ) { + let monthSlice = postsArray[currentIndex][0].slice( 11,13 ); + let month = ""; + if ( monthSlice === "01") { month = "Jan";} + else if ( monthSlice === "02") { month = "Feb";} + else if ( monthSlice === "03") { month = "Mar";} + else if ( monthSlice === "04") { month = "Apr";} + else if ( monthSlice === "05") { month = "May";} + else if ( monthSlice === "06") { month = "Jun";} + else if ( monthSlice === "07") { month = "Jul";} + else if ( monthSlice === "08") { month = "Aug";} + else if ( monthSlice === "09") { month = "Sep";} + else if ( monthSlice === "10") { month = "Oct";} + else if ( monthSlice === "11") { month = "Nov";} + else if ( monthSlice === "12") { month = "Dec";} + niceDate = postsArray[currentIndex][0].slice( 14,16 ) + " " + month + ", " + postsArray[currentIndex][0].slice( 6,10 ); + } +} + +//Generate the Post List HTML, which will be shown on the "Archive" page. + +function formatPostLink(i) { + let postTitle_i = ""; + if ( postsArray[i].length > 1 ) { + postTitle_i = decodeURI(postsArray[i][1]); + } else { + if ( postDateFormat.test ( postsArray[i][0].slice( 6,17 ) ) ) { + postTitle_i = postsArray[i][0].slice(17,-5).replace(/-/g," "); + } else { + postTitle_i = postsArray[i][0].slice(6,-5).replace(/-/g," "); + } + } + if ( postDateFormat.test ( postsArray[i][0].slice( 6,17 ) ) ) { + return '
  • ' + postsArray[i][0].slice(6,16) + " \u00BB " + postTitle_i + '
  • '; + } else { + return '
  • ' + postTitle_i + '
  • '; + } +} + +let postListHTML = ""; + +//Generate the Recent Post List HTML, which can be shown on the home page (or wherever you want!) +let recentPostsCutoff = 3; //Hey YOU! Change this number to set how many recent posts to show before cutting it off with a "more posts" link. +let recentPostListHTML = "

    Recent Posts:

    '; +} else { + recentPostListHTML += ""; +} + +//Generate the Next and Previous Post Links HTML +let nextprevHTML = ""; +let nextlink = ""; +let prevlink = ""; + +/*If you're on the newest blog post, there's no point to + a "Next Post" link, right? And vice versa with the oldest + post! That's what the following code handles.*/ +if ( postsArray.length < 2 ) { + nextprevHTML = 'Blog'; +} else if ( currentIndex === 0 ) { + prevlink = postsArray[currentIndex + 1][0]; + nextprevHTML = 'Blog | Previous Post \u00BB'; +} else if ( currentIndex === postsArray.length - 1 ) { + nextlink = postsArray[currentIndex - 1][0]; + nextprevHTML = '\u00AB Next Post | Blog'; +} else if ( 0 < currentIndex && currentIndex < postsArray.length - 1 ) { + nextlink = postsArray[currentIndex - 1][0]; + prevlink = postsArray[currentIndex + 1][0]; + nextprevHTML = '\u00AB Next Post | Blog | Previous Post \u00BB'; +} + +//----------------------------- + +//==[ 4. INSERTING THE SECTIONS INTO OUR ACTUAL HTML PAGES ]== + +/*Here we check if each relevant div exists. If so, we inject the correct HTML! + NOTE: All of these sections are optional to use on any given page. For example, if there's + one particular blog post where we don't want the footer to appear, + we simply don't put a + + \ No newline at end of file diff --git a/mymods/kotor2mods/img/Alternate-Revan-Romances.png b/mymods/kotor2mods/img/Alternate-Revan-Romances.png new file mode 100644 index 00000000..1e247494 Binary files /dev/null and b/mymods/kotor2mods/img/Alternate-Revan-Romances.png differ diff --git a/mymods/kotor2mods/img/Atton-Rand-and-Male-Exile-Romance.png b/mymods/kotor2mods/img/Atton-Rand-and-Male-Exile-Romance.png new file mode 100644 index 00000000..bc8d5f9e Binary files /dev/null and b/mymods/kotor2mods/img/Atton-Rand-and-Male-Exile-Romance.png differ diff --git a/mymods/kotor2mods/img/Dahnis-Flirt-Option-for-Female-PC.png b/mymods/kotor2mods/img/Dahnis-Flirt-Option-for-Female-PC.png new file mode 100644 index 00000000..ab769517 Binary files /dev/null and b/mymods/kotor2mods/img/Dahnis-Flirt-Option-for-Female-PC.png differ diff --git a/mymods/kotor2mods/img/Dahnis-Unique-Look.png b/mymods/kotor2mods/img/Dahnis-Unique-Look.png new file mode 100644 index 00000000..d64cdf53 Binary files /dev/null and b/mymods/kotor2mods/img/Dahnis-Unique-Look.png differ diff --git a/mymods/kotor2mods/img/Darth-Sion-and-Male-Exile-Mod.png b/mymods/kotor2mods/img/Darth-Sion-and-Male-Exile-Mod.png new file mode 100644 index 00000000..bb9b1b21 Binary files /dev/null and b/mymods/kotor2mods/img/Darth-Sion-and-Male-Exile-Mod.png differ diff --git a/mymods/kotor2mods/img/Exiles-Trial-Overlay-Removal.png b/mymods/kotor2mods/img/Exiles-Trial-Overlay-Removal.png new file mode 100644 index 00000000..d4200568 Binary files /dev/null and b/mymods/kotor2mods/img/Exiles-Trial-Overlay-Removal.png differ diff --git a/mymods/kotor2mods/img/Handmaiden-Disciple-Same-Gender-Romances.png b/mymods/kotor2mods/img/Handmaiden-Disciple-Same-Gender-Romances.png new file mode 100644 index 00000000..9bd4edf0 Binary files /dev/null and b/mymods/kotor2mods/img/Handmaiden-Disciple-Same-Gender-Romances.png differ diff --git a/mymods/kotor2mods/img/Juhani-Item-Pack-for-TSL.png b/mymods/kotor2mods/img/Juhani-Item-Pack-for-TSL.png new file mode 100644 index 00000000..f385cc1d Binary files /dev/null and b/mymods/kotor2mods/img/Juhani-Item-Pack-for-TSL.png differ diff --git a/mymods/kotor2mods/img/Leilukin's-Kreia-Reskin.png b/mymods/kotor2mods/img/Leilukin's-Kreia-Reskin.png new file mode 100644 index 00000000..c90ec8c1 Binary files /dev/null and b/mymods/kotor2mods/img/Leilukin's-Kreia-Reskin.png differ diff --git a/mymods/kotor2mods/img/Lonna-Vash-Mod-for-TSLRCM.png b/mymods/kotor2mods/img/Lonna-Vash-Mod-for-TSLRCM.png new file mode 100644 index 00000000..b94309a4 Binary files /dev/null and b/mymods/kotor2mods/img/Lonna-Vash-Mod-for-TSLRCM.png differ diff --git a/mymods/kotor2mods/img/Love-Between-Brianna-and-the-Exile-TSLRCM.png b/mymods/kotor2mods/img/Love-Between-Brianna-and-the-Exile-TSLRCM.png new file mode 100644 index 00000000..d58b0aac Binary files /dev/null and b/mymods/kotor2mods/img/Love-Between-Brianna-and-the-Exile-TSLRCM.png differ diff --git a/mymods/kotor2mods/img/No-Jealousy-Lock-Handmaiden.png b/mymods/kotor2mods/img/No-Jealousy-Lock-Handmaiden.png new file mode 100644 index 00000000..9222e6c8 Binary files /dev/null and b/mymods/kotor2mods/img/No-Jealousy-Lock-Handmaiden.png differ diff --git a/mymods/kotor2mods/img/PartySwap-ExtEnclave-Comp-Patch.png b/mymods/kotor2mods/img/PartySwap-ExtEnclave-Comp-Patch.png new file mode 100644 index 00000000..5a6e0837 Binary files /dev/null and b/mymods/kotor2mods/img/PartySwap-ExtEnclave-Comp-Patch.png differ diff --git a/mymods/kotor2mods/img/Prologue-Item-Recovery.png b/mymods/kotor2mods/img/Prologue-Item-Recovery.png new file mode 100644 index 00000000..3d2d3985 Binary files /dev/null and b/mymods/kotor2mods/img/Prologue-Item-Recovery.png differ diff --git a/mymods/kotor2mods/img/Remote-Tells-Influence-Patch.png b/mymods/kotor2mods/img/Remote-Tells-Influence-Patch.png new file mode 100644 index 00000000..014c7ff4 Binary files /dev/null and b/mymods/kotor2mods/img/Remote-Tells-Influence-Patch.png differ diff --git a/mymods/kotor2mods/img/TSL-Improved-Party-Outfits.png b/mymods/kotor2mods/img/TSL-Improved-Party-Outfits.png new file mode 100644 index 00000000..35c852d1 Binary files /dev/null and b/mymods/kotor2mods/img/TSL-Improved-Party-Outfits.png differ diff --git a/mymods/kotor2mods/img/TSL-Twilek-Male-NPC-Diversity.png b/mymods/kotor2mods/img/TSL-Twilek-Male-NPC-Diversity.png new file mode 100644 index 00000000..28edf70a Binary files /dev/null and b/mymods/kotor2mods/img/TSL-Twilek-Male-NPC-Diversity.png differ diff --git a/mymods/kotor2mods/img/TSL-Workbnch-Lightsaber-Creation.png b/mymods/kotor2mods/img/TSL-Workbnch-Lightsaber-Creation.png new file mode 100644 index 00000000..0fb2e4f9 Binary files /dev/null and b/mymods/kotor2mods/img/TSL-Workbnch-Lightsaber-Creation.png differ diff --git a/mymods/kotor2mods/img/Visas-Marr-and-Female-Exile-Romance.png b/mymods/kotor2mods/img/Visas-Marr-and-Female-Exile-Romance.png new file mode 100644 index 00000000..4e237105 Binary files /dev/null and b/mymods/kotor2mods/img/Visas-Marr-and-Female-Exile-Romance.png differ diff --git a/mymods/kotor2mods/img/Visas-Visible-Jedi-Robes.png b/mymods/kotor2mods/img/Visas-Visible-Jedi-Robes.png new file mode 100644 index 00000000..68923b2e Binary files /dev/null and b/mymods/kotor2mods/img/Visas-Visible-Jedi-Robes.png differ diff --git a/mymods/kotor2mods/index.html b/mymods/kotor2mods/index.html new file mode 100644 index 00000000..fb8e3af1 --- /dev/null +++ b/mymods/kotor2mods/index.html @@ -0,0 +1,252 @@ + + + + + + + + + + + + + + + + + + + + + + + + My KotOR 2 Mods | Leilukin's Hub + + + +
    +
    + +
    + +
    + + + +
    +

    My Mods for Star Wars: Knights of the Old Republic II: The Sith Lords

    + +

    Categories:

    +
    + + + + + + + +
    + +
    + +
    +

    Same-Gender Romances

    +
    +

    ↓↓READ THIS↓↓ before asking questions about my romance mods!
    + Frequently Asked Questions (FAQ) for My Same-Gender Romance Mods for KotOR II

    +
    + +
    +

    Atton Rand and Male Exile Romance

    + Banner of Atton Rand and Male Exile Romance mod
    +

    Makes Atton flirts with and expresses romantic interests for male Exiles.

    + + +
    + +
    +

    Handmaiden and Female Exile - Disciple and Male Exile Romance

    + Banner of Handmaiden and Female Exile - Disciple and Male Exile Romances mod
    +

    Makes the Handmaiden a romance option for female Exiles and the Disciple a romance option for male Exiles.

    + + +
    + +
    +

    Visas Marr and Female Exile Romance

    + Banner of Visas Marr and Female Exile Romance mod
    +

    Makes the Visas Marr romance scene available for female Exiles.

    + + +
    + +
    +

    Alternate Revan Romances REDUX

    + Banner of Alternate Revan Romances REDUX mod
    +

    Gives players options to set Revan's love ineterest(s), or lack thereof. Updated version of felixfelicitas' + Alternate Revan Romances mod.

    + + +
    + +
    +

    Darth Sion and Male Exile Mod

    + Banner of Darth Sion and Male Exile Mod
    +

    Makes Darth Sion develop the same affections to a male Exile like he did to a female Exile in vanilla KotOR II.

    + + +
    + +
    +

    Dahnis Flirt Option for Female PC

    + Banner of Dahnis Flirt Option for Female PC mod
    +

    Makes the NPC Dahnis flirt with the player character regardless of gender, including a female PC. A female PC also gets the option to flirt back.

    + + +
    +
    + +
    +

    Party Members

    + +
    +

    Leilukin’s Kreia Reskin

    + Banner of Leilukin’s Kreia Reskin mod
    +

    My version of a retexture of Kreia.

    + + +
    + +
    +

    No Jealousy Lock in Handmaiden Dialogue

    + Banner of No Jealousy Lock in Handmaiden Dialogue mod
    +

    Allows you to continue to talk to Handmaiden even if you have much higher influence with Visas than with Handmaiden.

    + + +
    + +
    +

    Visas Visible Jedi Robes

    + Banner of Visas Visible Jedi Robes mod
    +

    Makes Jedi robes visible on Visas Marr's body when you equip her with one.

    + + +
    + +
    +

    Love Between Brianna and the Exile - The Sith Lords Restored Content Mod Version

    + Banner of Love Between Brianna and the Exile - The Sith Lords Restored Content Mod Version
    +

    Updated version of DarthShgaad's Love Between Brianna and the Exile mod, made to be more compatible with The Sith Lords Restored Content Mod (TSLRCM).

    + +
    +
    + +
    +

    NPCs

    + +
    +

    Lonna Vash Mod for TSLRCM

    + Banner of Lonna Vash Mod for TSLRCM
    +

    Restores Jedi Master Lonna Vash's cut conversation by allowing the player to meet and talk to her in the secret tomb on Korriban. Updated version of Sikon's Lonna Vash Mod, made to be fully compatible with The Sith Lord Restored Content Mod (TSLRCM).

    + + +
    + +
    +

    TSL Twi'lek Male NPC Diversity

    + Banner of TSL Twi'lek Male NPC Diversity mod
    +

    Diversifies the appearances of Twi'lek male NPCs in KotOR 2: TSL by giving the named Twi'lek male NPCs different looks.

    + + +
    + +
    +

    Dahnis Unique Look

    + Banner of Dahnis Unique Look mod
    +

    Gives the NPC Dahnis a unique appearance to make her look different from other Twi'lek women NPCs.

    + + +
    +
    + +
    +

    Items

    + +
    +

    TSL Improved Party Outfits

    + Banner of TSL Improved Party Outfits mod
    +

    Adds new items to improve the properties of the default outfits of the human and humanoid party members of KotOR II, namely Atton, Bao-Dur, the Disciple, the Handmaiden, Kreia, Mandalore, Mira and Visas.

    + + +
    + +
    +

    Juhani Item Pack for TSL

    + Banner of Juhani Item Pack for TSL mod
    +

    Adds a new Jedi robe, a new headband and a new armband to In KotOR II: TSL, named after Juhani, with item descriptions that indicate these items once belonged to Juhani.

    + + +
    + +
    +

    Prologue Item Recovery

    + Banner of Prologue Item Recovery mod
    +

    Allows you to recover the items you obtain from the prologue, regardless if you choose to skip the prologue or not.

    + + +
    + +
    +

    TSL Workbench Lightsaber Creation

    + Banner of TSL Workbench Lightsaber Creation mod
    +

    Allows you to create lightsabers at a workbench, including double-bladed, one-handed or short lightsabers, with any color focusing crystals available in the game, after completing the quest to craft your first lightsaber.

    + + +
    +
    + +
    +

    Miscellaneous

    + +
    +

    Exile's Trial Overlay Removal

    + Banner of Exile's Trial Overlay Removal mod
    +

    Removes the blue overlay of the scene of the Exile's trial on Coruscant in The Sith Lords Restored Content Mod (TSLRCM).

    + + +
    +
    + +
    +

    Patches

    + +
    +

    PartySwap and Extended Enclave Compatibility Patch

    + Banner of PartySwap and Extended Enclave Compatibility Patch
    +

    A standalone patch to make DarthTyren's PartySwap mod compatible with danil-ch and Darth Hayze's Extended Enclave mod.

    + +
    + +
    +

    Remote Tells Influence Patch for The Sith Lords Restored Content Mod

    + Banner of LRemote Tells Influence Patch for The Sith Lords Restored Content Mod
    +

    A patch to make tk102's Remote Tells Influence mod more compatible with The Sith Lords Restored Content Mod (TSLRCM).

    + +
    +
    + +
    + +
    + +
    + +
    + + \ No newline at end of file diff --git a/mymods/mod-filter.js b/mymods/mod-filter.js new file mode 100644 index 00000000..07d3fb86 --- /dev/null +++ b/mymods/mod-filter.js @@ -0,0 +1,47 @@ +filterSelection("all") +function filterSelection(c) { + var x, i; + x = document.getElementsByClassName("filterDiv"); + if (c == "all") c = ""; + // Add the "show" class (display:block) to the filtered elements, and remove the "show" class from the elements that are not selected + for (i = 0; i < x.length; i++) { + w3RemoveClass(x[i], "show"); + if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "show"); + } +} + +// Show filtered elements +function w3AddClass(element, name) { + var i, arr1, arr2; + arr1 = element.className.split(" "); + arr2 = name.split(" "); + for (i = 0; i < arr2.length; i++) { + if (arr1.indexOf(arr2[i]) == -1) { + element.className += " " + arr2[i]; + } + } +} + +// Hide elements that are not selected +function w3RemoveClass(element, name) { + var i, arr1, arr2; + arr1 = element.className.split(" "); + arr2 = name.split(" "); + for (i = 0; i < arr2.length; i++) { + while (arr1.indexOf(arr2[i]) > -1) { + arr1.splice(arr1.indexOf(arr2[i]), 1); + } + } + element.className = arr1.join(" "); +} + +// Add active class to the current control button (highlight it) +var btnContainer = document.getElementById("myBtnContainer"); +var btns = btnContainer.getElementsByClassName("filterBtn"); +for (var i = 0; i < btns.length; i++) { + btns[i].addEventListener("click", function() { + var current = document.getElementsByClassName("active"); + current[0].className = current[0].className.replace(" active", ""); + this.className += " active"; + }); +} \ No newline at end of file diff --git a/mymods/my-kotor1-mods-header.png b/mymods/my-kotor1-mods-header.png new file mode 100644 index 00000000..af4ac342 Binary files /dev/null and b/mymods/my-kotor1-mods-header.png differ diff --git a/mymods/my-kotor2-mods-header.png b/mymods/my-kotor2-mods-header.png new file mode 100644 index 00000000..d01330ff Binary files /dev/null and b/mymods/my-kotor2-mods-header.png differ diff --git a/mymods/mymods.css b/mymods/mymods.css new file mode 100644 index 00000000..f9e912eb --- /dev/null +++ b/mymods/mymods.css @@ -0,0 +1,72 @@ +@import url("/main.css"); + +.indexLink { + font-size: 1.6rem; +} + +.psa { + font-weight: 700; + font-size: 1.4rem; +} + +.mod-entry { + background: #241445; + max-width: 850px; + position:relative; + margin: 1em 0; + padding: 1em 1.5em 1.5em 1.5em; +} + +.mod-list { + overflow: hidden; +} + +.filterDiv { + display: none; /* Hidden by default */ +} + +/* The "show" class is added to the filtered elements */ +.show { + display: block; + } + +.filterBtn { + border: none; + outline: none; + padding: 12px 16px; + margin: 3px 0; + background-color: #d3aad5; + color: #241445; + cursor: pointer; + font-weight: 600; + font-size: 1.1rem; +} + +.filterBtn:hover { + background-color: #d5c2d6; +} + +.filterBtn.active { + background-color: #241445; + color: #ED64F5; +} + +.linkBtn { + font: 1.3rem 'Source Sans Pro', Arial, sans-serif; + border: 2px solid #BA6FE8; + border-radius: 10px; + padding: 12px 16px; + margin: 0.25em 0.15em; + background-color: #241445; + color: #BA6FE8; + cursor: pointer; + font-weight: 700; + text-transform: uppercase; + } + +.linkBtn:hover { + cursor:pointer; + color: white; + background-color: #BA6FE8; + transition: 0.5s; +} \ No newline at end of file diff --git a/not_found.css b/not_found.css new file mode 100644 index 00000000..65391109 --- /dev/null +++ b/not_found.css @@ -0,0 +1 @@ +@import url("/index.css"); \ No newline at end of file diff --git a/not_found.html b/not_found.html new file mode 100644 index 00000000..c670328d --- /dev/null +++ b/not_found.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + + Page Not Found | Leilukin's Hub + + +
    + Leilukin's Hub website banner + +

    Page Not Found

    +

    Oops! Either the page you are looking for does not exist, or it has been moved to a diffrent part of this site.

    + + + +
    + + diff --git a/playlists/img/Mandopop-LGBTQ+-Anthem-Cover.png b/playlists/img/Mandopop-LGBTQ+-Anthem-Cover.png new file mode 100644 index 00000000..ff3fc6e0 Binary files /dev/null and b/playlists/img/Mandopop-LGBTQ+-Anthem-Cover.png differ diff --git a/playlists/img/My-Dear-Summer-Lover-cover.png b/playlists/img/My-Dear-Summer-Lover-cover.png new file mode 100644 index 00000000..32f573b8 Binary files /dev/null and b/playlists/img/My-Dear-Summer-Lover-cover.png differ diff --git a/playlists/index.html b/playlists/index.html new file mode 100644 index 00000000..3382ec6c --- /dev/null +++ b/playlists/index.html @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + Playlists | Leilukin's Hub + + + +
    +
    + +
    + +
    + + + +
    +

    Leilukin's Music Playlists

    +

    My Dear Summer Lover

    + A playlist cover image made of Sam and Michelle from A Summer's End being close to kissing, with the title 'My Dear Summer Lover: A Sam x Michelle Fanmix' +

    A fanmix for the visual novel A Summer’s End — Hong Kong 1986, dedicated to Sam and Michelle’s love story.

    +

    This mix contains mostly Cantonese and English songs, with one Mandarin song. Majority of these songs were performed by Hong Kong artists and released in the 80s, because A Summer’s End took place in Hong Kong and in the 80s.

    + +

    I have carefully selected and arranged these tracks, so the lyrics would reflect Sam and Michelle’s relationship development throughout A Summer’s End. Therefore, the content of this mix could be considered spoilers if you have not played the visual novel.

    + +

    Since Oracle and Bone has cited Anita Mui as a major inspiration for them and this visual novel, I have also included multiple songs performed by Anita Mui in this mix. Because A Summer’s End is a lesbian story, when I was choosing which songs to include in this mix, I also prioritize songs that were performed by women artists.

    + +

    + + +
    + +

    Mandopop LGBTQ+ Anthem 華語流行音樂同志國歌

    + A playlist cover image made of the progress pride flag, with Chinese words meaning queer anthem on top +

    Collection of Mandarin queer anthems.

    +

    I made this playlist after discovering Wikipedia's list of Chinese queer anthems on its Mandarin article for Gay Anthem (同志國歌).

    + +

    + + +
    + + + +
    + +
    + + \ No newline at end of file diff --git a/playlists/playlists.css b/playlists/playlists.css new file mode 100644 index 00000000..e5727656 --- /dev/null +++ b/playlists/playlists.css @@ -0,0 +1,21 @@ +@import url("/main.css"); + +.linkBtn { + font: 1.3rem 'Source Sans Pro', Arial, sans-serif; + border: 2px solid #BA6FE8; + border-radius: 10px; + padding: 12px 16px; + margin: 0.25em 0.15em; + background-color: #241445; + color: #BA6FE8; + cursor: pointer; + font-weight: 700; + text-transform: uppercase; + } + +.linkBtn:hover { + cursor:pointer; + color: white; + background-color: #BA6FE8; + transition: 0.5s; +} \ No newline at end of file diff --git a/resources/anti-harry-potter-jk-rowling-masterlist.html b/resources/anti-harry-potter-jk-rowling-masterlist.html new file mode 100644 index 00000000..6494b84a --- /dev/null +++ b/resources/anti-harry-potter-jk-rowling-masterlist.html @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + Anti-Harry Potter and Anti-J. K. Rowling Masterlist | Resources | Leilukin's Hub + + + +
    +
    + +
    + +
    + + + +
    +

    Anti-Harry Potter and Anti-J.K. Rowling Masterlist

    + +

    First published on March 19, 2023
    Last updated on April 15, 2023

    + +

    Like many millennials, I grew up with the Harry Potter series and was a major fan of the series. I had read the original 7 books and watched their film adaptations. The series was a special interest of mine throughout my early- to mid-teen years. While the Harry Potter novels were far from the first books I read, they were the first fantasy novels I read, and the series’ concept of a magical world set in a contemporary setting fascinated teenage me.

    + +

    However, even during my Harry Potter fixation years, there were things from the series that bothered me, from the idea of house elves being a slave race that naturally love being slaves, to Snape’s unconvincing “redemption” arc. As I got older and became more aware of social issues, I started to notice more problems with the series. In addition, reading more books has also made me realise that even on a technical writing level, the Harry Potter series was mediocre at best. As a result, I had stopped becoming a Harry Potter fan even before J.K. Rowling’s transphobia got mainstream attention.

    + +

    Unfortunately, many adults with nostalgia goggles still refuse to let go of Harry Potter, and they believe Harry Potter can be separated or “reclaimed” by J.K. Rowling, despite how much Rowling’s world-view and prejudice are inextricably linked to her writing and stories.

    + +

    Therefore, I am compiling this masterlist by curating various resources that are critical of the Harry Potter series and J.K. Rowling. Items are ordered in chronological order. This is far from a comprehensive list of all the pieces that criticise Harry Potter and Rowling; this list is my curated list of ones that I have read, watched or listened to, and considered excellent critiques.

    + +

    Articles

    + + +

    Videos

    + + +

    Podcasts

    +
      +
    • The Shrieking Shack — A book reading podcast hosted by Xeecee and Liz. Originally a Harry Potter reread podcast made by and for lapsed fans that goes through every chapter of the Harry Potter books and their film adaptations and analyses the writing and politics of the series and J.K. Rowling.
    • +
    +
    + +
    + +
    + + \ No newline at end of file diff --git a/resources/index.html b/resources/index.html new file mode 100644 index 00000000..0cea64c7 --- /dev/null +++ b/resources/index.html @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + Resources | Leilukin's Hub + + + +
    +
    + +
    + +
    + + + +
    +

    Resources

    + +

    Here are resources I have compiled myself.

    + +

    Leilukin's Masterlists

    + + +

    Leilukin's Mod Builds

    +

    Lists of video game mods I use for my own playthroughs.

    + +
    + +
    + +
    + + \ No newline at end of file diff --git a/resources/resources.css b/resources/resources.css new file mode 100644 index 00000000..8b2cbbd7 --- /dev/null +++ b/resources/resources.css @@ -0,0 +1,10 @@ +@import url("/main.css"); + +.mod-recs { + list-style-type: none; +} + +.highlight { + font-size: 24px; + font-weight: bold; +} \ No newline at end of file diff --git a/shrines/asummersend/asummersend.css b/shrines/asummersend/asummersend.css new file mode 100644 index 00000000..e37da4f2 --- /dev/null +++ b/shrines/asummersend/asummersend.css @@ -0,0 +1,353 @@ +:root { + --header-image: url('./img/asummersend_header.png'); + --body-color: #fceaff; + --body-bg: #1f0033; + --content-bg: #000000; + --content: #43256E; + --title-color: #FF29D8; + --title-border: #d3aad5; + --code-bg: #241445; + --code-border: #82668f; + --link-color: #d270ff; + --link-hover: #7E4197; + --blockquote-bg: #222121; + --blockquote-border: #4d4385; + --box-bg: #13092D; +} + +@font-face { + font-family: 'Nunito'; + src: url('/assets/fonts/Nunito-VariableFont_wght.ttf') format("truetype"); + font-weight: 125 950; + font-stretch: 75% 125%; + font-style: normal; +} + +@font-face { + font-family: 'Nunito'; + src: url('/assets/fonts/Nunito-Italic-VariableFont_wght.ttf') format("truetype"); + font-weight: 125 950; + font-stretch: 75% 125%; + font-style: italic; +} + +html, +body { +scroll-behavior: smooth; +} + +body { + font-family: 'Nunito', Arial, sans-serif; + font-size: 16px; + margin: 0; + background-color: var(--body-bg); + background-size: 65px; + color: var(--body-color); + background-image: var(--body-bg-image); + background-attachment: fixed; + line-height: 1.6; +} + +* { + box-sizing: border-box; +} + +h1, +h2, +h3 { + color: var(--title-color); +} + +h1 { + font-size: 2.2rem; + border-bottom: 3px solid var(--title-border); + padding-bottom: 8px; +} + +h1:not(:first-child) { + padding-top: 30px; +} + +h2 { + font-size: 1.7rem; +} + +strong { + color: var(--title-color); +} + +hr { + width: 75%; + margin-top: 1.5rem; + margin-bottom: 1.5rem; +} + +blockquote { + border-left: var(--blockquote-border) 3px solid; + background: var(--blockquote-bg); + padding: 0.1px 0.75rem; + margin: 0 1.5rem; +} + +.linkBtn { + font: 1.1rem 'Source Sans Pro', Arial, sans-serif; + border: 2px solid var(--link-color); + border-radius: 10px; + padding: 12px 16px; + margin: 0.25em 0.15em; + background: none; + color: var(--link-color); + cursor: pointer; + font-weight: 700; + text-transform: uppercase; +} + +.linkBtn:hover { + cursor:pointer; + color: white; + background-color: var(--link-color); + transition: 0.5s; +} + +span.monospace { + font-family: monospace; + border: 1px solid var(--code-border); + padding: 2px; + background-color: var(--code-bg); +} + +.code-snippet { + background-color: var(--code-bg); + border: 1px solid var(--code-border); + display: block; + padding: 0.5em; + overflow-x: auto; + word-break: break-all; +} + +.box { + background-color: var(--box-bg); + border: 1px solid var(--title-color); + padding: 10px; +} + +.full-width-youtube-video { + position: relative; + padding-bottom: 56.25%; + height: 0; +} + +.full-width-youtube-video iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + + +/* CONTAINER for wrapping the entire website */ +#container { + max-width: 1100px; + /* the width of the layout */ + /* if you change the above value, scroll to the bottom +and change the media query according to the comment! */ + margin: 0 auto; + /* this centers the entire page */ +} + +/* For all links on your page EXCEPT for the navigation */ +#container a { + color: var(--link-color); + font-weight: bold; +} + +#container a:hover { + color: var(--link-hover); +} + +#header { + width: 100%; + background-color: var(--content-bg); + height: 480px; + background-image: var(--header-image); + background-size: 100%; + background-repeat: no-repeat; + background-position: center; +} + +/* NAVIGATION SECTION */ +.sticky-nav { + position: fixed; + top: 0; + max-width: 900px; +} + +#navbar { + height: 40px; + background-color: var(--content-bg); + width: 100%; + margin-bottom: 10px; + z-index: 999; +} + +#navbar ul { + display: flex; + padding: 0; + margin: 0; + list-style-type: none; + justify-content: space-evenly; +} + +#navbar li { + padding-top: 10px; +} + +#navbar li a { + color: var(--link-color); + /* navbar text color */ + font-weight: 800; + text-decoration: none; + /* this removes the underline */ +} + +#navbar li a:hover { + color: var(--link-hover); + text-decoration: underline; +} + +#flex { + display: flex; +} + +/* EXTRAS */ +#topBar { + width: 100%; + height: 30px; + padding: 10px; + font-size: smaller; + background-color: var(--box-bg); +} + +/* MAIN CONTENT AREA, between the sidebars */ +main { + font-size: 1.2rem; + flex: 1; + order: 2; +} + +.content-section { + background-color: var(--content-bg); + padding: 20px; +} + +.content-section:not(:first-child) { + margin-top: 10px; +} + +/* This colors BOTH sidebars +If you want to style them separately, +create styles for #leftSidebar and #rightSidebar */ +aside { + background-color: var(--content-bg); + width: 200px; + padding: 20px; + font-size: smaller; + /* this makes the sidebar text slightly smaller */ +} + +aside h1, aside h2, aside h3 { + margin-bottom: 0; +} + +aside ul { + margin-top: 0.5rem; +} + +aside .box ul { + padding-left: 10px; +} + +#leftSidebar { + order: 1; + margin-right: 10px; +} + +#rightSidebar { + order: 3; + margin-left: 10px; +} + +.sidebar-content { + position: sticky; + top: 40px; + font-size: 0.9rem; +} + +/* TABLE OF CONTENTS */ + +.toc-title { + font-size: 1.3rem; + font-weight: bold; +} + +.toc-list { + list-style: none; + margin-left: 0; + padding-left: 0; + font-size: 1rem; +} + +.toc-list li { + margin-bottom: 0.5em; +} + + +/* FOOTER */ + +footer { + background-color: var(--content-bg); + width: 100%; + height: 40px; + padding: 10px; + text-align: center; + margin-top: 10px; +} + + +/* MEDIA QUERY STARTS HERE */ + +/* To keep things responsive, +if you want to change the width of your page, +take your new width of the #container, and then subtrack it by 100. +Use this new number as the "max-width" value below */ + +@media only screen and (max-width: 1000px) { + #flex { + flex-wrap: wrap; + } + + aside { + width: 100%; + } + + /* the order of the items is adjusted here for responsiveness. + since the sidebars would be too small on a mobile device. */ + main { + order: 1; + } + + #leftSidebar { + order: 2; + margin-right: 10px; + } + + #rightSidebar { + order: 3; + margin-left: 10px; + } + + #navbar ul { + flex-wrap: wrap; + } +} \ No newline at end of file diff --git a/shrines/asummersend/gallery.html b/shrines/asummersend/gallery.html new file mode 100644 index 00000000..9a4f5c5c --- /dev/null +++ b/shrines/asummersend/gallery.html @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + Gallery | A Summer’s End — Hong Kong 1986 Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    A Summer’s End — Hong Kong 1986 Gallery

    +

    A Summer’s End — Hong Kong 1986 was lovingly crafted by its developer Oracle and Bone with gorgeous art, so i want to make a page dedicated to my appreciation for the visual novel’s art.

    +

    I also highly recommend checking out the official site of A Summer's End and the social media accounts of Oracle and Bone's for more beauriful art about the visual novel!

    +
    + +
    +

    In-Game Screenshots

    + In-Game Screenshot of A Summer's End 01 + In-Game Screenshot of A Summer's End 02 + In-Game Screenshot of A Summer's End 03 + In-Game Screenshot of A Summer's End 04 + In-Game Screenshot of A Summer's End 05 + In-Game Screenshot of A Summer's End 06 + In-Game Screenshot of A Summer's End 07 + In-Game Screenshot of A Summer's End 08 + In-Game Screenshot of A Summer's End 09 +
    +
    + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/asummersend/img/ASE-Screenshot-01.png b/shrines/asummersend/img/ASE-Screenshot-01.png new file mode 100644 index 00000000..cd2322ce Binary files /dev/null and b/shrines/asummersend/img/ASE-Screenshot-01.png differ diff --git a/shrines/asummersend/img/ASE-Screenshot-02.png b/shrines/asummersend/img/ASE-Screenshot-02.png new file mode 100644 index 00000000..2425addc Binary files /dev/null and b/shrines/asummersend/img/ASE-Screenshot-02.png differ diff --git a/shrines/asummersend/img/ASE-Screenshot-03.png b/shrines/asummersend/img/ASE-Screenshot-03.png new file mode 100644 index 00000000..74693219 Binary files /dev/null and b/shrines/asummersend/img/ASE-Screenshot-03.png differ diff --git a/shrines/asummersend/img/ASE-Screenshot-04.png b/shrines/asummersend/img/ASE-Screenshot-04.png new file mode 100644 index 00000000..f4b551af Binary files /dev/null and b/shrines/asummersend/img/ASE-Screenshot-04.png differ diff --git a/shrines/asummersend/img/ASE-Screenshot-05.png b/shrines/asummersend/img/ASE-Screenshot-05.png new file mode 100644 index 00000000..95fecc42 Binary files /dev/null and b/shrines/asummersend/img/ASE-Screenshot-05.png differ diff --git a/shrines/asummersend/img/ASE-Screenshot-06.png b/shrines/asummersend/img/ASE-Screenshot-06.png new file mode 100644 index 00000000..4c36eb92 Binary files /dev/null and b/shrines/asummersend/img/ASE-Screenshot-06.png differ diff --git a/shrines/asummersend/img/ASE-Screenshot-07.png b/shrines/asummersend/img/ASE-Screenshot-07.png new file mode 100644 index 00000000..ca9627f9 Binary files /dev/null and b/shrines/asummersend/img/ASE-Screenshot-07.png differ diff --git a/shrines/asummersend/img/ASE-Screenshot-08.png b/shrines/asummersend/img/ASE-Screenshot-08.png new file mode 100644 index 00000000..f8e70f61 Binary files /dev/null and b/shrines/asummersend/img/ASE-Screenshot-08.png differ diff --git a/shrines/asummersend/img/ASE-Screenshot-09.png b/shrines/asummersend/img/ASE-Screenshot-09.png new file mode 100644 index 00000000..14717ca2 Binary files /dev/null and b/shrines/asummersend/img/ASE-Screenshot-09.png differ diff --git a/shrines/asummersend/img/ase-icon.png b/shrines/asummersend/img/ase-icon.png new file mode 100644 index 00000000..7537db27 Binary files /dev/null and b/shrines/asummersend/img/ase-icon.png differ diff --git a/shrines/asummersend/img/asummersend_header.png b/shrines/asummersend/img/asummersend_header.png new file mode 100644 index 00000000..764fa113 Binary files /dev/null and b/shrines/asummersend/img/asummersend_header.png differ diff --git a/shrines/asummersend/index.html b/shrines/asummersend/index.html new file mode 100644 index 00000000..2fb6a03d --- /dev/null +++ b/shrines/asummersend/index.html @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + A Summer’s End — Hong Kong 1986 Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    Welcome to my A Summer’s End — Hong Kong 1986 Shrine!

    +

    A Summer’s End — Hong Kong 1986 is a visual novel developed by Oracle and Bone, a Canada-based independent studio consists of two Asian queer women, Charissa So and Tida Kietsungden. The visual novel tells of a lesbian romance story between Michelle Cheung, an office worker, and Sam Wong, a video store owner, that takes place in Hong Kong in the year of 1986.

    + +

    Initially released in English on 23 Apr, 2020, A Summer’s End has also been translated into Simplified Chinese, Traditional Chinese and Cantonese. The Chinese translations were released on July 9, 2021.

    + +

    A Summer’s End is available on Steam and itch.io. It also has an official website.

    +
    + +
    +

    How I Discovered A Summer’s End — Hong Kong 1986

    + In-Game Screenshot of A Summer's End 02 +

    I first learned about A Summer’s End — Hong Kong 1986 through Linux Game Consortium, a Linux gaming news website. There was a period where I set up my gaming laptop to dual boot Windows 10 and Linux, so I ended up following Linux gaming news for a while. While Windows is still my main platform for gaming, the discovery of A Summer’s End was the biggest unexpected benefit and surprise when I tried out Linux.

    + +

    As a lesbian, the premise of a visual novel about a sapphic romance already caught my interest, but what urged me to play it even more was the Hong Kong setting, which made my interest in the game personal, since I am a Cantonese-speaking Chinese lesbian who grew up with Hong Kong media. Not to mention, it is rare to see a fiction that tells of a sapphic love story that takes place in Hong Kong.

    +
    + +
    +

    Why A Summer’s End — Hong Kong 1986 is Special to Me

    + In-Game Screenshot of A Summer's End 05 +

    As a Chinese lesbian who speaks Cantonese and had engaged with a lot of Hong Kong media during my teenage years, A Summer’s End - Hong Kong 1986 is the lesbian story that I relate to and feel represented the most.

    + +

    I relate to both the protagonists, Michelle and Sam, as their characters represent different parts of my life as a Chinese lesbian. I also relate to the story’s theme of hoping for the future of our homeland despite the political uncertainties.

    + +

    My standards for lesbian representation in media has also become much higher because of this visual novel, since A Summer’s End is also a perfect example of how some of the best representations of minority groups are actually found in media made by indie creators, especially those who are part of those minority groups, so we shouldn’t rely on mainstream media for representation especially when big name media companies are going to just give us scraps.

    + +

    If you ask me to list just one piece of queer art that means everything to me, that gives me comfort, inspiration, and strength the most, A Summer’s End would be it.

    + +

    I seriously cannot recommend A Summer’s End enough, especially for Asian sapphic women.

    +
    +
    + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/asummersend/playlists.html b/shrines/asummersend/playlists.html new file mode 100644 index 00000000..8e730c2e --- /dev/null +++ b/shrines/asummersend/playlists.html @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + Playlists | A Summer’s End — Hong Kong 1986 Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    A Summer’s End — Hong Kong 1986 Playlists

    +

    A Summer’s End — Hong Kong 1986 is a gold mine of music. Not only that the visual novel has a great soundtrack (its official soundtrack was released on August 21, 2020), but the developer Oracle and Bone has also compiled playlists related to the game.

    + +

    As a tribute to A Summer's End, I have also created a fanmix myself.

    +
    + +
    +

    Sam's Mixtape

    +

    Compiled by Oracle and Bone, Sam’s Mixtape A-Side and B-Side are playlists of the songs that Sam was listening to on the first day she met Michelle.

    + +

    Sam's Mixtape A-Side

    +

    + + +

    Sam's Mixtape B-Side

    +

    + +
    + +
    +

    夏日戀人 (Summer Lover)

    +

    Oracle and Bone compiled this playlist as a tribute to Anita Mui, who was a major inspiration for A Summer’s End — Hong Kong 1986.

    + +

    + +
    + +
    +

    My Dear Summer Lover

    + A playlist cover image made of Sam and Michelle from A Summer's End being close to kissing, with the title 'My Dear Summer Lover: A Sam x Michelle Fanmix' +

    My fanmix for A Summer’s End — Hong Kong 1986, dedicated to Sam and Michelle’s love story.

    + +

    This mix contains mostly Cantonese and English songs, with one Mandarin song. Majority of these songs were performed by Hong Kong artists and released in the 80s, because A Summer’s End took place in Hong Kong and in the 80s.

    + +

    I have carefully selected and arranged these tracks, so the lyrics would reflect Sam and Michelle’s relationship development throughout A Summer’s End. Therefore, the content of this mix could be considered spoilers if you have not played the visual novel.

    + +

    Since Oracle and Bone has cited Anita Mui as a major inspiration for them and this visual novel, I have also included multiple songs performed by Anita Mui in this mix. Because A Summer’s End is a lesbian story, when I was choosing which songs to include in this mix, I also prioritize songs that were performed by women artists.

    + +

    + +
    +
    + + + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/asummersend/trivia.html b/shrines/asummersend/trivia.html new file mode 100644 index 00000000..e7cb03d7 --- /dev/null +++ b/shrines/asummersend/trivia.html @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + Trivia | A Summer’s End — Hong Kong 1986 Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    A Summer’s End — Hong Kong 1986 Trivia

    +

    Here is a collection of trivia about the characters from A Summer’s End provided by the developer Oracle and Bone on their social media pages, especially Tumblr.

    +
    + +
    +

    Movies and Music References

    +

    A Summer’s End contains many references to movies and music. This community post on Steam compiles a list of the movie and music references made in the game. Please be aware it contains spoilers!

    + +

    Movies and Music in A Summer's End – Hong Kong 1986

    +
    + +
    +

    Character Trivia

    + +

    Chinese Names

    +

    Michelle Cheung's Chinese name is 張鳳霞, while Sam Wong's Chinese name is 黃嘉欣. Oracle and Bone had commented on their idea behind the characters' Chinese names on this Tumblr post:

    +
    + A part of how we came up with their names was by referencing names of Hong Kong film actresses from their time period as a little homage to them. We also thought of how their names might reflect their upbringing. For example, despite Michelle being younger than Sam, she has a more old fashioned sounding Chinese name. The meaning of their Chinese names was also important to us. We particularly wanted Michelle’s name to have metaphoric meaning that reflected her story as well as the themes of the game. +
    + +

    Birthdays

    + + +

    Zodiac Signs:

    + + +

    MBTI personalities

    + + +

    Inspirations

    +
      +
    • The character and fashion of Cecelia has been largely inspired by Anita Mui. [Source]
    • +
    +
    +
    + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/index.html b/shrines/index.html new file mode 100644 index 00000000..60c04511 --- /dev/null +++ b/shrines/index.html @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + Shrines | Leilukin's Hub + + + +
    +
    + +
    + +
    + + + +
    +

    Shrines

    +

    Internet shrines are website pages dedicated to specific topics or interests. Here is a list of shrines I have made for my own website.

    + +

    A Summer’s End — Hong Kong 1986

    + Header of A Summer’s End — Hong Kong 1986 + +

    Star Wars: Knights of the Old Republic

    + Header of the Star Wars: Knights of the Old Republic series +
    + +
    + +
    + + \ No newline at end of file diff --git a/shrines/shrine.js b/shrines/shrine.js new file mode 100644 index 00000000..3fb6e6dd --- /dev/null +++ b/shrines/shrine.js @@ -0,0 +1,28 @@ +/* SCRIPT FOR THE NAVIGATION BAR */ + +// When the user scrolls the page, execute stickyFunction +window.onscroll = function() {stickyFunction()}; + +// Get the navbar +var navbar = document.getElementById("navbar"); + +// Get the offset position of the navbar +var sticky = navbar.offsetTop; + +// Add the sticky class to the navbar when you reach its scroll position. Remove "sticky" when you leave the scroll position +function stickyFunction() { + if (window.pageYOffset >= sticky) { + navbar.classList.add("sticky-nav") + } else { + navbar.classList.remove("sticky-nav"); + } +} + + +/* SCRIPT FOR THE FOOTER */ + +// Generate footer content +var footerHTML = ` + This shrine is made with ♥ by Leilukin +`; +document.querySelector("#footer").innerHTML = footerHTML; \ No newline at end of file diff --git a/shrines/shrines.css b/shrines/shrines.css new file mode 100644 index 00000000..878cc41a --- /dev/null +++ b/shrines/shrines.css @@ -0,0 +1 @@ +@import url("/main.css"); \ No newline at end of file diff --git a/shrines/starwarskotor/articles/arren-kae-kreia-theory.html b/shrines/starwarskotor/articles/arren-kae-kreia-theory.html new file mode 100644 index 00000000..23d81e13 --- /dev/null +++ b/shrines/starwarskotor/articles/arren-kae-kreia-theory.html @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + My Thoughts on the “Arren Kae is Kreia” Theory | Articles | Star Wars: Knights of the Old Republic Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    Why I Personally Do Not Subscribe to the “Arren Kae is Kreia” Theory

    + +

    Originally published on January 27, 2021 on Tumblr

    + +

    If you are a fan of Star Wars: Knights of the Old Republic II: The Sith Lords, you might have heard of the theory that Arren Kae, mother of Brianna the Handmaiden, and Kreia are the same person. If you have not heard of the theory, a compilation of the in-game evidence used to support the theory can be found on the Let’s Play Archive. The theory has become so popular that many fans of the game take it for granted, which can make it easy to forget that the theory was never officially confirmed.

    + +

    I think the “Arren Kae is Kreia” theory is well-thought-out, and I agree that there are multiple in-game evidence that can support the theory. However, personally I do not subscribe to the theory, nor incorporate it into my headcanons for Knights of the Old Republic 2. I have eventually decided that in my KotOR 2 headcanons, I keep Arren and Kreia as two different people. Why?

    + +

    Firstly, I want Brianna to have more positive women role models, especially given her troubled relationships with her sisters and Atris. Arren was the reason Brianna wants to be a Jedi, and the Kreia we see in the game is definitely not a good role model for someone who wants to be a Jedi. Kreia might have been a better person when she was a Jedi, but we never know for sure. Not to mention Kreia doesn’t treat Brianna any better than the other party members. Brianna deserves better.

    + +

    Secondly, I like the theory suggested by an anonymous message I received on Tumblr that Arren Kae was to Kreia what the Exile was to Atris. The KotOR 2 game itself already builds up parallels between Kreia and Atris: both were fallen Jedi who personally felt betrayed by the Jedi in some ways, and many of the things in KotOR 2 happen because of their plans, schemes and manipulation. Therefore, I love the idea that if Arren and Kreia were two different people, they had similar dynamics to the Exile and Atris, in that Arren and Kreia were very good friends in the past, with Kreia potentionally having romantic feelings for Arren, but Arren's departure and exile from the Jedi Order became a catalyst for Kreia's disillusionment with the Jedi Order, and it only got worse from there.

    + +

    Ultimately, since the "Arren Kae is Kreia" theory is never officially confirmed, I am free to choose to not subscribe to the theory, regardless of how popular the theory is in the fandom, and come up with my own theory about Arren Kae instead.

    + +

    In conclusion, Keeping Arren Kae and Kreia as two different people in my KotOR headcanons allows Arren to be a positive influence in Brianna’s life that Brianna needs. Also, there are many interesting ideas and possibilities about Arren and Kreia’s dynamics that could be explored.

    +
    +
    + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/starwarskotor/articles/handmaiden-sisters-mother.html b/shrines/starwarskotor/articles/handmaiden-sisters-mother.html new file mode 100644 index 00000000..04a5c820 --- /dev/null +++ b/shrines/starwarskotor/articles/handmaiden-sisters-mother.html @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + Where is the Mother of Handmaiden’s Sisters? | Articles | Star Wars: Knights of the Old Republic Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    Where is the Mother of the Handmaiden’s Sisters?

    + +

    Originally published on February 19, 2020 on Tumblr

    + +

    In Star Wars: Knights of the Old Republic II: The Sith Lords, from the first conversation you could have with Brianna, also known as The Last Handmaiden, in the secret Jedi academy on Telos, to the moment where you train Brianna to become a Jedi Guardian if she joins your party, the game has consistently shown that Brianna's family plays a major part of her story and character arc due to her identity as an illegitimate child of the Echani general Yusanis and Jedi Knight Arren Kae. I have always enjoyed Brianna's arc, so even when I am playing a female Jedi Exile, I always use mods that allow Brianna to join a female Exile's party.

    + +

    As I have thought more about Brianna’s family drama, one day I have come to realise that there is a mystery about Brianna’s family that I find it unfortunate that we know next to nothing about: the mother of Brianna’s sisters.

    + +

    I find it curious that we never get to learn anything about the mother of Brianna’s sisters at all, aside from the fact that she was not Arren Kae. Given what we know about Brianna’s family and the drama surrounding it, the realization that the game never explores the mother of Brianna’s sisters has made me want to ask a lot of questions about her:

    + +

    Where is she? Is she still alive? How is her relationship with Yusanis and her own biological daughters? How much did she know about Yusanis’ affair with Arren? Did she know Arren? Did she actually know Brianna? If so, how did she feel about Brianna?

    + +

    In the conversation where Brianna confirms she had a different mother than her sisters, she says she never saw her mother’s face, so we can assume that Arren was not part of Brianna’s life when Brianna grew up. In the same conversation, the extent Brianna talks about her father, like the reason her father went to fight in the Mandalorian Wars was to join her mother and how he had changed after returning from the war, suggests that Brianna knows her father well enough, so I guess she have lived with her father, though this makes me wonder: was the mother of Brianna’s sisters part of Brianna’s life when she grew up?

    + +

    I also wonder, when exactly did Brianna’s sisters know about their father’s affair with Arren? Did Yusanis tell them himself or did they find out in another way? Did Brianna and her sisters know each other before learning about their father’s affair?

    + +

    I guess it makes sense that we know more about Arren Kae than we did the mother of Brianna’s sisters, since she was the mother of one of the party members, while the Handmaiden Sisters are NPCs who are not even given any names. Arren is also mentioned by Mical the Disciple as one of Revan’s masters, and Revan is an important character in both Knights of the Old Republic games. If you subscribe to the theory that Arren Kae and Kreia are the same person (I have my own reasons not to, however), Arren’s importance increases even more.

    + +

    However, I would still like to know at least a little more about the mother of Brianna’s sisters, since Brianna’s complicated relationship with her sisters also affects Brianna’s character and story arc.

    +
    +
    + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/starwarskotor/articles/img/juhani-lesbian-in-game-evidence.png b/shrines/starwarskotor/articles/img/juhani-lesbian-in-game-evidence.png new file mode 100644 index 00000000..3c456a8f Binary files /dev/null and b/shrines/starwarskotor/articles/img/juhani-lesbian-in-game-evidence.png differ diff --git a/shrines/starwarskotor/articles/index.html b/shrines/starwarskotor/articles/index.html new file mode 100644 index 00000000..b9b6135f --- /dev/null +++ b/shrines/starwarskotor/articles/index.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + Articles | Star Wars: Knights of the Old Republic Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    My Star Wars: Knights of the Old Republic Articles

    +

    Here is a list of articles I have written for the Star Wars: Knights of the Old Republic series.

    +
    + + +
    + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/starwarskotor/articles/juhani-hostility-towards-canderous.html b/shrines/starwarskotor/articles/juhani-hostility-towards-canderous.html new file mode 100644 index 00000000..5a1ae75f --- /dev/null +++ b/shrines/starwarskotor/articles/juhani-hostility-towards-canderous.html @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + Access Juhani's Conversaion about Canderous without Restoration Mods | Articles | Star Wars: Knights of the Old Republic Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    How to Access Juhani's Conversaion about Canderous without Restoration Mods

    + +

    Published on October 11, 2022

    + +
    + +
    + +

    If you follow the modding scene of Star Wars: Knights of the Old Republic, you might be aware of a conversation with Juhani where the player asks her why she is hostile towards Canderous. It is a commonly assumed that it is cut content, because the condition to trigger said conversation is unknown by the KotOR community, and there are mods that aim to restore said conversation.

    + +

    After thorough investigation into the game files, I finally discovered that it is actually possible to access Juhani's conversation about Canderous without any restoration mod. However, the issue is that in the vanilla game, the condition to make said conversation available is very specific, thus making it extremely easy to miss. Therefore, what restoration mods do to this specific Juhani conversation is making it easier to access.

    + +

    Here are the conditions to make Juhani's conversation about Canderous without restoration mods:

    + +

    Firstly, you need to have both Canderous and Juhani in your party when talking to certain NPCs on Dantooine. Canderous will make comments when you talk to those NPCs, then Juhani will interject and show hostility towards Canderous. Specifically, these interjections happen when you:

    +
      +
    • Talk to Gar at the courtyard outside the Jedi Enclave and ask him about the problems with kath hounds and Mandalorians
    • +
    • Accuse Handon Guld of murdering Calder Nettic for cheating on his wife, during the "Murdered Settler" side quest
    • +
    • Tell Nurik Sandral you are investigating Shen Matale's disappearance, during the "Sandral-Matele Feud" side quest
    • +
    + +

    You need to hear Juhani's interjections to Canderous' comments on at least two of the above occasions.

    + +

    Secondly, you need to progress Juhani's conversations to the point where she reveals that her family fled to Taris because the Mandalorians attacked the Cathar homeworld and slaughtered many Cathar people. It is after this conversation where you get the dialogue option to ask Juhani why she is hostile towards Canderous.

    + +

    As evidence, I have recorded and compile the above video myself showing Juhani's interactions with Canderous and Juhani's conversation about Canderous.

    +
    +
    + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/starwarskotor/articles/juhani-lesbian-evidence.html b/shrines/starwarskotor/articles/juhani-lesbian-evidence.html new file mode 100644 index 00000000..d4697707 --- /dev/null +++ b/shrines/starwarskotor/articles/juhani-lesbian-evidence.html @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + Evidence of Juhani being a Lesbian from Star Wars: KotOR's Game Files | Articles | Star Wars: Knights of the Old Republic Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    Evidence of Juhani being a Lesbian from Star Wars: Knights of the Old Republic's Game Files

    + +

    Originally published on July 15, 2017 on Tumblr

    + +

    The fact that Juhani from Star Wars: Knights of the Old Republic is a canon lesbian character is a fairly common knowledge among LGBTQ+ fans of Star Wars. However, occasionally I still see people who do not know that the first KotOR game has the very first confirmed gay character in any Star Wars media, including the old Star Wars Expanded Universe; there are some other people who actually believe that Juhani is bisexual.

    + +

    Therefore, as a lesbian and someone who has made mods for the Knights of the Old Republic games and written a detailed Juhani romance guide, I would like to present hard evidence from the game files to point out that Juhani is in fact a lesbian, a woman who is exclusively attracted to women.

    + +

    The most crucial evidence comes from k_hjuh_dialog.dlg, Juhani’s main dialogue file which contains all the conversations covered in my Juhani Romance Guide. If you use the KotOR Tool to browse the game files, k_hjuh_dialog.dlg is under KotOR I > BIFs > templates.bif > Dialog. I recommend using DLGEditor to view the .dlg files from KotOR games.

    + +

    Here is a screenshot of my DLGEditor with the most relevant part of the k_hjuh_dialog.dlg file:
    + A screenshot of Version 2.3.2 of the DLG Editor displaying Juhani's main dialogue file, with the first conversation highlighted

    + +

    The highlighted dialogue shown in the screenshot (”I feel I must apologize for the way I acted towards you before, in the grove. It was wrong of me.”) is the beginning of your first personal conversation with Juhani after Juhani joins your party. Here is a video of the conversation in question:

    +
    + +
    + +

    As shown in the screenshot above, once you begin this conversation, the script k_hjuh_p17 will fire, and this is the source of the script in question:

    + + + void main() + { + int iGender = GetGender(GetPCSpeaker()); + + if (iGender == GENDER_FEMALE) + { + SetGlobalBoolean("T_JUHANIROM", TRUE); + } + } + + +

    (In KotOR Tool, you can see the source script k_hjuh_p17.nss under KotOR I > BIFs > scripts.bif > Script, Source)

    + +

    As you may have guessed from the above script, k_hjuh_p17 sets the Global Boolean T_JUHANIROM to TRUE if, and ONLY IF, the player character is female. The T_JUHANIROM global is used by the game to check if Juhani’s romance is active or not. In other words, the game activates Juhani’s romance ONLY IF your player character is female, as soon as you start Juhani’s personal conversation after she joins your party. If your player character is male, Juhani’s romance will NOT be activated.

    + +

    Here is the hard evidence from KotOR's game files that Juhani is a lesbian, a woman who is exclusively attracted to women. Juhani is NOT straight. Juhani is NOT bisexual.

    + +

    The game used to have a bug that allowed male player characters to access Juhani’s romance, which is probably why some thought that Juhani is bisexual. However, the bug had been fixed in later patches. By fixing the bug, the game has made sure that ONLY a female player character can romance Juhani.

    + +

    Even though the word “lesbian” or “gay” is never used in any of the KotOR games, it does not change the fact that Juhani is a woman character who can only be romanced by a woman player character, which means Juhani is gay, a lesbian.

    + +

    In conclusion, Juhani is a canon lesbian character and has always been intended to be such.

    + +

    I would also like to emphasise that I DO NOT support any mods that make Juhani a romance option for male characters under any circumstances, because such mods would be erasing the identity of the very first confirmed lesbian character in any Star Wars media. Not to mention, Juhani is the ONLY confirmed LGBTQ+ character in the entire KotOR series (Belaya from KotOR 1 and Luxa from KotOR 2 are heavily implied to be gay or bisexual, but their sexuality is never confirmed). Please respect LGBTQ+ representation and the identities of canon LGBTQ+ characters.

    +
    +
    + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/starwarskotor/guides/index.html b/shrines/starwarskotor/guides/index.html new file mode 100644 index 00000000..e4cffcf7 --- /dev/null +++ b/shrines/starwarskotor/guides/index.html @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + Guides | Star Wars: Knights of the Old Republic Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    Star Wars: Knights of the Old Republic Guides

    +

    Here is a list of guides for the Star Wars: Knights of the Old Republic series I have written or found useful. This page also includes lists of cheats.

    +
    + +
    +

    KotOR 1 Guides

    + +
    + +
    +

    KotOR 2: TSL Guides

    + +
    + +
    +

    Cheats

    + +
    +
    + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/starwarskotor/guides/kotor-juhani-romance-guide.html b/shrines/starwarskotor/guides/kotor-juhani-romance-guide.html new file mode 100644 index 00000000..72d5152f --- /dev/null +++ b/shrines/starwarskotor/guides/kotor-juhani-romance-guide.html @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + Juhani Romance Guide | Guides | Star Wars: Knights of the Old Republic Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    Star Wars: Knights of the Old Republic: Juhani Romance Guide

    +

    Written by Leilukin

    +

    First published on March 5, 2016
    Last updated on October 12, 2022

    +

    [This guide is also available on Google Docs]

    + +

    The contents of this guide may not be reposted, in whole or in part, without my permission. You may quote a part of this guide to help players who have problems with progressing or completing Juhani's romance, but DO NOT claim this guide as your own.

    +
    + +
    +

    Introduction

    + +

    Since I could not find a solid and detailed guide for Juhani's romance anywhere, and many players (I used to be one of them as well) have troubles with triggering Juhani's final romance conversation, I have decided to write a guide myself. Even though there is very little content for Juhani's romance, if you want to experience the very first canon same-gender romance option in BioWare games first hand, this guide is for you.

    + +

    For this guide, I have done a lot of research and investigation to find out the conditions required to trigger Juhani's conversations, including tons of web searching, using KotOR Tool to browse and examine the game files related to Juhani's conversations, as well as using KotOR SaveGame Editor (KSE) to compare my save files.

    + +

    NOTE: Even if you use KotOR 1 Restoration (K1R) mod, the conditions to progress Juhani's romance remains the same as vanilla KotOR 1. However, I recommend using KOTOR 1 Community Patch (K1CP) instead of K1R due to the fact K1CP fixes more bugs than K1R does, including bugs related to Juhani.

    +
    + +
    +

    Important Notes

    + +

    First and foremost, since Juhani was written to be a lesbian, your player character must be female if you want to romance Juhani. The game activates Juhani's romance ONLY IF your player character is female.

    + +

    As long as your player character is female, even if you romance Carth, Bastila (if you use mods that allow the female player character to romance Bastila, such as the Biromantic Bastila mod) or even both, you can still romance Juhani.

    + +

    In order to advance your progress with Juhani's conversations, it is highly recommended to talk to Juhani and go through all her available conversations every time you level up. The progression with Juhani's conversations is tied in with the ability to level up, not just being at a certain level. Some Juhani's conversations will only be triggered after you gain 1 level after a previous conversation (see the Walkthrough section below for details). Given the limited level cap in KotOR 1 (the maximum level is 20), if you do not talk to Juhani often before you reach the level cap, it is very likely you will miss out on the chance to get her later conversations, including her final romance conversation.

    + +

    You also need to complete Juhani's personal quest, "Threat From Xor", to make her final romance conversation available.

    + +

    You need to be nice to Juhani during your conversations with her, because mean dialogue choices will set the global boolean T_JUHANIROM to 0, ending the romance, and apparently it is impossible to restart the romance afterwards.

    + +

    Before you start a new KotOR playthrough, I highly recommend you to download and install the KOTOR 1 Community Patch, because the mod fixes many bugs with KotOR, including bugs that may block you from progressing Juhani's quest and conversations.

    + +

    (WARNING: this guide contains spoilers for both Juhani's personal story and KotOR's main plot)

    +
    + +
    +

    Walkthrough

    + +

    There are two paths in Juhani's conversations: History and Personal. The History path explores Juhani's past and will lead to Juhani's personal quest "Threat from Xor", while the Personal path explores Juhani's relationship with the player character and will lead to Juhani's love confession if her romance is active.

    + +

    You can check your progress with Juhani's conversations by using the KotOR SaveGame Editor (KSE). Once you launch KSE, and it successfully loads your KotOR save files, expand a save file, and look for Globals > Numerics, G_JUHANIH_STATE refers to the History path, while G_JUHANIP_STATE refers to the Personal path. The walkthrough below contains details on how to trigger all the conversations required to make the final romance conversation available, the global values in KSE, and links to YouTube videos for these conversations.

    + +

    In addition, you can check if Juhani's romance is still active by using KSE: look for Globals > Booleans, and make sure T_JUHANIROM is set to 1.

    + +

    History Conversation Path

    + +

    History #1: This conversation is available once Juhani joins your party, which happens after you collect your first Star Map on Dantooine, and you're tasked by the Jedi Council to search for the Star Forge. You can ask Juhani how did she become a Jedi. After this conversation, the global value of G_JUHANIH_STATE will be set to 1. [YouTube video]

    + +

    History #2: Available when you gain 1 level after History #1. Juhani talks about meeting the Jedi back in her homeworld. After this conversation, the global value of G_JUHANIH_STATE will be set to 2. [YouTube video]

    + +

    History #3: Available when you gain 1 level after History #2. Juhani reveals that she was from Taris, and she expresses anger over the destruction of Taris. After this conversation, the global value of G_JUHANIH_STATE will be set to 3. [YouTube video]

    + +
      +
    • BUG WARNING: There is a bug that may block you from progressing Juhani's Personal Conversation path after you complete History #3, and thus preventing you from triggering Juhani's final romance conversation. See the "Personal Conversation Path" section below for more details about this bug. This bug is fixed by the KOTOR 1 Community Patch, which is a major reason I highly recommend this mod.
    • +
    • If you are unable to install mods for some reason, I would suggest that once you complete History #3, stop leveling up your character. Once you get your second Star Map (the Dantooine Star Map counts as the first Star Map), complete Personal #3 AND Personal #4 at once. After all that is done, you can now level up to trigger History #4.
    • +
    + +

    History #4: Available when you gain 1 level after History #3. Juhani apologizes for her outburst over Taris' destruction, and recalls her life on Taris. After this conversation, the global value of G_JUHANIH_STATE will be set to 4. [YouTube video]

    + +

    History #5: Available when you gain 1 level after History #4. Juhani talks about how her parents and her ended up on Taris. After this conversation, the global value of G_JUHANIH_STATE will be set to 5. [YouTube video]

    + +

    History #6: Available when you gain 1 level after History #5. Juhani talks about her being sold into slavery after her parents died. After this conversation, the global value of G_JUHANIH_STATE will be set to 6. This conversation will also make Juhani's personal quest, "Threat From Xor" available. [YouTube video]

    + +

    "Threat From Xor" quest: This quest will be available after you have completed History #6, where Juhani talks about her being sold into slavery. Have Juhani in your party and walk around the spaceport on Tatooine, Kashyyyk, Manaan or Korriban. A character named Xor will approach Juhani and reveal that he was the slaver who attempted to buy Juhani on Taris before the latter was freed by the Jedi. Xor leaves, but he threatens to come back later.

    + +

    The second encounter with Xor happens when you come back just outside the Ebon Hawk by using the Rapid Transit system. Xor will ambush you and Juhani. Once you defeat Xor, you can either let him die or encourage Juhani to kill him.

    + +

    After you have dealt with Xor, if you have completed Personal #6 (detailed below), the global value of G_JUHANIP_STATE will be set to 10. [YouTube video for the whole quest]

    + +
      +
    • BUG WARNING: There is an infamous bug with the Xor quest that once you trigger the quest, even after completing it, you will not be able to encounter any other messengers for your other party members' personal quests, and for Mika Dorin's premium shop on Korriban. The fix for this bug is included in the KOTOR 1 Community Patch and the KotOR 1 Restoration (K1R) mod.
    • +
    + +

    Personal Conversation Path

    + +

    Personal #1: Available once Juhani joins your party. She apologizes again for attacking you back on Dantooine. Once you begin this conversation, if — and ONLY IF — your player character is female, the global boolean T_JUHANIROM will be set to 1, which means Juhani's romance will become active. After this conversation, the global value of G_JUHANIP_STATE will be set to 1. [YouTube video]

    + +

    Personal #2: Available after completing Personal #1. Juhani talks about Quatra and her fall to the dark side. After this conversation, the global value of G_JUHANIP_STATE will be set to 2. [YouTube video]

    + +

    Personal #3: Available after completing Personal #2 and getting 2 Star Maps (including the Dantooine one). Juhani expresses gratitude to you for accepting her throughout your journey. After this conversation, the global value of G_JUHANIP_STATE will be set to 3. [YouTube video]

    + +

    Personal #4: Available once you complete History #3 and Personal #3. Juhani describes the life of being an alien on Taris is like hell. After this conversation, the global value of G_JUHANIP_STATE will be set to 4. [YouTube video]

    + +
      +
    • BUG WARNING: Personal #4 is by far the trickiest to trigger of all Juhani's conversations. There is a bug that once you complete History #3, if you level up even just once, History #4 will override Personal #4, making Personal #4 unavailable, and you will be unable to get the later conversations in the Personal Conversation path (except Personal #7 below), including the final romance conversation. In fact, I found that missing out Personal #4 was the reason I was unable to get Juhani's final romance conversation in my old playthrough. This bug is fixed by the KOTOR 1 Community Patch, which is a major reason I highly recommend this mod.

    • +
    • If you are unable to install mods for some reason, I would suggest that once you complete History #3, stop leveling up your character. Once you get your second Star Map (the Dantooine Star Map counts as the first Star Map), complete Personal #3, then immediately talk to Juhani again to check if Personal #4 is available. After you successfully trigger Personal #4 and complete the conversation, you can now level up your character to proceed to History #4 and beyond.
    • +
    + +

    Personal #5: Available when you gain 1 level after Personal #4. Juhani asks about your past. After this conversation, the global value of G_JUHANIP_STATE will be set to 6. [YouTube video]

    + +

    Personal #6: Available after completing Personal #5 and getting 3 Star Maps (including the Dantooine one). Juhani comments on your alignment (light side, dark side or neutral). After this conversation, if you have completed the "Threat From Xor" quest, the global value of G_JUHANIP_STATE will be set to 10; if you have not, the global value of G_JUHANIP_STATE will be set to 7. [YouTube video for light side version]

    + +

    Personal #7: Available after completing the Leviathan level. Juhani comments on the reveal that the player character is Revan. This conversation is not required to trigger Juhani's final romance conversation, but I include it here because not only it is classified as part of the Personal conversation path by the game files, but also it is a very important element in Juhani and Revan's relationship. [YouTube video]

    + +

    Personal #8: The final conversation, which is also Juhani's love confession, in order to make this final romance conversation available, you must meet ALL the following conditions:

    +
      +
    1. You have completed Personal #6 and the "Threat From Xor" quest. If you use KotOR SaveGame Editor to check your progress, the global value of G_JUHANIP_STATE must be 10.
    2. +
    3. During the confrontation with Bastila at the Rakatan temple summit on the Unknown World, you must reject Bastila's suggestion to reclaim the title of Dark Lord of the Sith and rule the galaxy, which gives you the light side ending of the game. If you choose to agree with Bastila's suggestion, you will be forced to kill Juhani (and Jolee), which ends the romance, and you will get the dark side ending of the game.
    4. +
    + +

    Provided the above conditions have been met, the final romance conversation occurs after Bastila leaves the Rakatan temple summit. When you talk to Juhani, she will confess her feelings to you. If you have installed Kexikus' Juhani Romance Enhancement mod (see the Mod Recommendation section below for details), the conversation will be triggered automatically when you are leaving the temple summit, so you do not need to initiate the conversation yourself. [YouTube video for vanilla version] [YouTube video for Juhani Romance Enhancement mod version]

    + +
    + +
    +

    Mod Recommendations

    + +

    These mods are not required to complete Juhani's romance, but they add or enhance Juhani's content.

    + +
      +
    • Juhani Romance Enhancement by Kexikus: Improves the final romance conversation with Juhani, including triggering the conversation automatically when you are about to leave the temple summit, instead of having to talk to Juhani yourself to initiate the conversation, provided you have met the conditions to make this conversation available (detailed in the Walkthrough section above), as well as adding a kiss between Juhani and the female player character.
    • +
    • KOTOR 1 Community Patch: Even though this bug fix mod is not specifically about Juhani, it fixes many bugs and issues related to Juhani's content, including but not limited to:
    • +
        +
      • Juhani wouldn't spawn in the post-Leviathan scene on the Ebon Hawk
      • +
      • If doing certain Juhani's conversations in the wrong order, it was possible to block any further progress in Juhani's Personal Conversation path, and prevent you from accessing Juhani's final romance conversation
      • +
      • No other messengers could appear once the "Threat From Xor" quest is started
      • +
      • The second Xor encounter was impossible to start if you first meet him and his goons without Juhani in your party
      • +
      • The second Xor encounter is unavailable on Tatooine
      • +
      • Xor is a Twi'lek, despite him being a human in the Xbox version of KotOR, and him openly making anti-alien comments (NOTE: This fix was originally done by my Human Xor Restoration mod. I have given permission to include my mod in this Community Patch)
      • +
      +
    • Juhani Dialogue Restoration by Leilukin: My mod. Restores Juhani's conversations with the player that are unused or easy to miss in vanilla KotOR, including:
    • +
        +
      • Asking Juhani about the planet you are on
      • +
      • Asking Juhani about why she is hostile towards Canderous
      • +
      • Juhani talking about the evils on Korriban
      • +
      +
    • Human Xor Unique Look by Leilukin: My mod. Changes Xor's species from a Twi'lek to a human to fit his anti-alien nature and dialogue, with a unique appearance different from other human NPCs. This mod is listed on this guide because Xor is tied to Juhani's personal quest.
    • +
    • Party on the Leviathan! by Fair Strides: Restores Juhani's conversation, including romance conversation with a female player character, on the Leviathan, by spawning the rest of the Ebon Hawk crew on the Leviathan after you are rescued.
    • +
    + +

    NOTE: I DO NOT support any mods that make Juhani a romance option for male characters under any circumstances. In addition, I DO NOT support any mods that make Juhani look like a human.

    +
    + +
    + + + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/starwarskotor/guides/kotor-redeeming-bastila-guide.html b/shrines/starwarskotor/guides/kotor-redeeming-bastila-guide.html new file mode 100644 index 00000000..da0b4048 --- /dev/null +++ b/shrines/starwarskotor/guides/kotor-redeeming-bastila-guide.html @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + Redeeming Bastila Guide | Guides | Star Wars: Knights of the Old Republic Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    Star Wars: Knights of the Old Republic: Redeeming Bastila Guide

    +

    written by Leilukin

    +

    First published on September 16, 2018

    +

    [This guide is also available on Google Docs]

    +
    + +
    +

    Introduction

    + +

    In Star Wars: Knights of the Old Republic, towards the end of the game you will be provided the opportunity to determine which ending you will get, and there will be consequences of your choice there.

    + +

    Specifically, on the Rakatan temple summit at the Unknown World, you will meet Basila, who at that point has fallen to the dark side. After some dialogue and you fought Bastila, Bastila will suggest you to reclaim the title of the Dark Lord of the Sith and rule the galaxy. If you choose to agree with Bastila's suggestion, you will get the dark side ending, with a lot of dark side points. However, if you choose to reject Bastila's suggestion, you will get the light side ending, with a lot of light side points.

    + +

    If you choose the light side ending, you will face the fallen Bastila again in the Star Forge. Depending on your dialogue choices, you will either successfully convince Bastila to return to the light side, or you kill her if you fail to do so.

    + +

    This guide will provide in-depth details on how the mechanics of redeeming Bastila on the Star Forge works, and which dialogue options will give you a better chance in successfully redeeming Bastila.

    + +

    For this guide, I have used KotOR Tool, DLGEditor and DeNCS to investigate the relevant dialogue file and scripts.

    +
    + +
    +

    The Mechanics of Redeeming Bastila

    + +

    The game uses a point system to determine if you will succeed in redeeming Bastila based on the amount of points you earn throughout the conversations when you face Bastila on the Star Forge. Some dialogue options will earn you points to increase your chance in redeeming Bastila.

    + +

    In general, to successfully convince Bastila to return to the light side, you need to choose dialogue options that say you believe that Bastila still has the light side in her, that she can be saved, tell her about the dangers of the dark side or remind her about the Jedi's teaching, and choose these options as much as possible.

    +

    In the final part of Bastila's dialogue, when Bastila says she is beyond saving, do not agree with her because it will make you kill her.

    + +

    There will be [Persuade] options in the final part of Bastila's dialogue. While it is possible to save Bastila without choosing the [Persuade] options as long as you choose the right dialogue options, if you invest skill points in Persuade and pass the Persuade check, it would also be easier to save Bastila. If you want to learn more about the Persuade mechanic in KotOR, you can check out this page.

    + +

    An active romance with Bastila will make it easier to save Bastila. Although in vanilla KotOR, only a male player character can romance Bastila, this mechanic also works for a female PC who romances Bastila with mods like JC's Romance Enhancement: Biromantic Bastila. That said, it is possible to redeem Bastila even if you do not romance her.

    +
    + +
    +

    Dialogue Walkthrough

    + +

    There are 4 phases in your conversation with Bastila in the Star Forge, as each phase will end with you and Bastila fight, and Bastila will initiate new dialogue each time you defeat her. There are dialogue options in each phase that will increase your points in your chance to save Bastila.

    + +

    Below is a full walkthrough of the dialogue options that will maximize your points to successfully redeem Bastila.

    + +

    Phase 1

    + +

    Once you find Bastila in the Star Forge, Bastila will start the conversation by saying, "Revan - I knew you'd come for me." When you are provided with dialogue options:

    +
      +
    • Choose the "I'll never give up on you, Bastila. I know you can still be saved." option to gain 2 points.
    • +
    + +

    Regardless of your dialogue choice here, you and Bastila will fight.

    + +

    Phase 2

    + +

    After you defeat Bastila for the first time, Bastila will initiate conversation again by saying, "I see now why Malak followed you...". After Bastila says, "You were a fool to give it all up and follow the light side.":

    +
      +
    • Choose either "I am as strong in the light as I ever was following the dark side." or "You've been consumed by the dark side, Bastila. Can't you see it's destroying you?" to gain 1 point.
    • +
    + +

    If you choose either of the above options, Bastila will argue. When she says "Eventually there will be no limit to what I can accomplish with the Force!":

    +
      +
    • Choose "You will accomplish death and destruction with the dark side, nothing else." to gain 1 point. If you choose this option or "Malak will never let you become that powerful. He will kill you first." (Note: this option does not give you any points), Bastila will argue again, choose "You're dooming yourself to an endless cycle of death and betrayal." to gain 1 point.
    • +
    + +

    You and Bastila will fight again.

    + +

    Phase 3

    + +

    After you defeat Bastila for the second time, Bastila will say, "You are growing weary, I can sense it!" After she says "... Soon this will all be over!":

    +
      +
    • Choose "Your emotions get the better of you, Bastila. Remember the Jedi code." to gain 1 point.
    • +
    • Alternately, choose "Then strike me down, Bastila. I won't defend myself." to gain 2 points. Any of the dialogue options following this will gain another 2 points. Specifically:
    • +
        +
      • "Remember what you once were, Bastila. A Jedi would never strike down a defenseless opponent."
      • +
      • "You are not evil, Bastila. You will not strike down a defenseless opponent."
      • +
      • If you romance Bastila, you have an additional option: "We meant something to each other, once. I don't believe you will strike me down."
      • +
      +
    + +

    You and Bastila will fight again.

    + +

    Phase 4

    + +

    After you defeat Bastila for the last time, and Bastila questions, "Why can't I defeat you?":

    +
      +
    • Choose "Now you see the dark side is not stronger than the light." to gain 1 point.
    • +
    + +

    Later when Bastila says "End my life quickly. There is no other way.", choose "I could never kill you, Bastila." if you romance her, or "There's no need for me to kill you, Bastila." if you do not.

    + +

    After Bastila says "You cannot let me live", choose "You can reject the dark side, Bastila. Return to the light." to gain 2 points.

    + +

    When Bastila says, "I can no longer find peace in the Force":

    +
      +
    • Choose the [Persuade] option. The [Persuade] options are different depending on if you romance Bastila or not.
    • +
        +
      • If romanced, choose "[Persuade] Use our bond, then. Take your strength from me." Succeeding in this persuasion option requires an Easy Persuade check. If you pass the check, you will gain 2 points. Later, choose "[Persuade] I love you, Bastila. I can't abandon you, ever." Again, succeeding in this persuasion option requires an Easy Persuade check. If you pass the check, you will gain 5 points.
      • +
      • If not romanced, choose "[Persuade] Turn to the Jedi code, Bastila. It can help you." This requires a Medium Persuade check. If you pass the check, you will gain 2 points. Later, choose "[Persuade] Look into your heart, Bastila, and you will find the light." Again, succeeding in this persuasion option requires a Medium Persuade check. If you pass the check, you will gain 3 points.
      • +
      +
    • Alternately, if you are worried that you may fail the [Persuade] check, you can choose "I was redeemed, Bastila. You can be, too." to add 1 point. When Bastila responses with "I was supposed to protect you from the dark side", choose "You can't protect someone from the dark side. Each individual must choose their own path." to add 1 point, or if you romance her, choose "You did more than protect me, Bastila." to gain 1 point. Note that these dialogue options were also available after you choose the [Persuade] options, so if you want to gain the maximum amount of points, you may choose all these options.
    • +
    + +

    If you want to redeem Bastila, eventually you need to choose "Help us defeat the Sith, Bastila. This will atone for what you have done." and then "I trust you enough to leave myself open to your attack, Bastila.".

    + +

    If you have gained at least 10 points in total, Bastila will respond with "You are brave... and some would say foolish. But you are also right. The dark side has not wholly consumed me. I cannot raise my blade against you." If Bastila says this to you, congratulations! You have saved her!

    + +

    From this point, regardless of your dialogue option, Bastila will stay behind and use her Battle Meditation to help the Republic, while you go to face Darth Malak alone.

    +
    + +
    + + + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/starwarskotor/guides/kotor-sandral-matale-feud-guide.html b/shrines/starwarskotor/guides/kotor-sandral-matale-feud-guide.html new file mode 100644 index 00000000..e1157a54 --- /dev/null +++ b/shrines/starwarskotor/guides/kotor-sandral-matale-feud-guide.html @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + Sandral-Matale Feud Ending Guide | Guides | Star Wars: Knights of the Old Republic Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    Star Wars: Knights of the Old Republic: Sandral-Matale Feud Ending Guide

    +

    written by Leilukin

    +

    First published on September 22, 2018

    +

    [This guide is also available on Google Docs]

    +
    + +
    +

    Introduction

    + +

    This guide is requested by Deadly Stream user Sith Holocron.

    + +

    In Star Wars: Knights of the Old Republic, there is a side quest on Dantooine named "Sandral-Matale Feud", which you receive after you have dealt with Juhani at the grove and met the Jedi Council.

    + +

    This quest line revolves around a family feud between the Sandrals and the Matales, mainly between their patriarchs, Nurik Sandral and Ahlan Matale. As you progress the quest line, you will discover that Nurik's daughter, Rahasia and Ahlan's son, Shen are romantically involved. The quest line will lead to a heated confrontation between Nurik and Ahlan, and there are multiple ways to resolve the quest line.

    +

    This guide will provide details on the different ways to resolve the Sandral-Matele feud, and how to achieve those endings.

    +
    + +
    +

    Sandral-Matale Feud Resolution Walkthrough

    + +

    After you rescue Shen and meet Rahasia outside the Sandral estate, you will be confronted by Ahlan Matale and Nurik Sandral, Shen and Rahasia's fathers respectively.

    + +

    After Ahlan yells at Nurik, "I don't want to hear any of your excuses! Now I will get revenge for your transgressions!" Your following dialogue choices will determine the outcome of the "Sandral-Matale Feud" quest. I recommend saving the game before rescuing Shen and meeting Rahasia outside the Sandral estate, so you can reload the save if you do not get the ending you want.

    + +

    The "Sandral-Matale Feud" quest could be resolved in four different ways:

    + +

    1. Convincing Ahlan and Nurik to sort out their differences and allow their children to stay together as a couple.

    + +

    If you want to do a Light Side playthrough, this would be the best outcome. However, you need to pass a Hard difficulty Persuasion check to get this ending. If you want to learn more about the Persuade mechanic in KotOR, you can check out this page. Since you will likely be at level 10 when you do this quest, you need at least 10 points in your Persuade skill to have a decent chance to pass the check.

    + +

    As for the dialogue choices, after Ahlan rants about him getting revenge, you need to choose "You two just need to calm down."

    + +

    When Nurik calls Ahlan "Matale dog";, choose either "Both of you need to calm down." or "You should try to sort this out together."

    + +

    Now you will be given [Persuade] options. When presented the option, choose "[Persuade] Shen is capable of making decisions on his own." After you pass a Hard difficulty Persuasion check, choose another Persuade option "[Persuade] Children grow up and leave eventually." when you are given the opportunity. If you have successfully passed the previous Persuade check, you should have no problem passing this check.

    + +

    Once you have succeeded in these [Persuade] options, congratulations! You manage to set the feud between the Sandrals and the Matales peacefully. Your dialogue choices immediately following this do not matter. You will be rewarded with Light Side points.

    + +

    2. Shen and Rahasia run off together, while the feud between their fathers remains.

    + +

    To get this second Light Side ending, after Ahlan rants about him getting revenge:

    +
      +
    • Choose "You two just need to calm down." When Nurik calls Ahlan "Matale dog", choose "Why don't you try listening to your children?"
    • +
    • Alternately, choose "Don't make me intervene in this.". When Ahlan says, "This will be resolved very shortly", your dialogue choice here does not matter. Later, when Rahasia tells her father she wants to with Shen forever, choose "You two should stay together no matter what."
    • +
    + +

    Shen and Rahasia will run off together, and you will find them in the Jedi Enclave, while Ahlan and Nurik will remain angry at each other. You will be rewarded with Light Side points.

    + +

    You would also get this outcome if you fail the Persuade check when you choose the [Persuade] option.

    + +

    3. Breaking up Shen and Rahasia.

    + +

    To get this ending, after Ahlan rants about him getting revenge:

    + +
      +
    • Choose "Don't make me intervene in this." When Ahlan says, "This will be resolved very shortly." your dialogue choice here does not matter. Later, when Rahasia tells her father she wants to with Shen forever, choose either "I don't know if you can trust Rahasia, Shen." or "You may want to reconsider this." When Nurik yells "Get away from my daughter Matale!", choose "Turn away, Shen." Your dialogue choices following this do not matter.
    • +
    • Alternately, if you want to get Dark Side points from this outcome, choose "Why don't you just shoot each other and get it over with." When Ahlan says he wants Nurik "dead and rotting in the ground", choose "If you fight, you'll all be killed." and then choose "[Lie] Rahasia doesn't love you anyway." You need to pass a Medium difficulty Persuasion check for this [Lie] option to succeed.
    • +
    + +

    Shen breaks up with Rahasia, and the two return to their own fathers.

    + +

    4. Making the Sandrals and the Matales kill each other, result in the death of the fathers and the children.

    + +

    To get this Dark Side ending, after Ahlan rants about him getting revenge, choose "Why don't you just shoot each other and get it over with." When Ahlan says he wants Nurik "dead and rotting in the ground", choose "The only way either of you will end this is with blood." When Ahlan yells about how can Shen disrespects his (Ahlan's) wishes, choose "[Lie] You know, Nurik, Ahlan actually did kill Casus." Interestingly, you do not need any Persuade skills to make this [Lie] option succeed.

    + +

    After Nurik kills Shen, choose either "Are you going to let that one pass?" or "Wipe them all out." for more Dark Side points. After the fathers and their children are dead, you will fight the fathers' droids.

    +
    +
    + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/starwarskotor/img/kotor-icon.png b/shrines/starwarskotor/img/kotor-icon.png new file mode 100644 index 00000000..fab645c7 Binary files /dev/null and b/shrines/starwarskotor/img/kotor-icon.png differ diff --git a/shrines/starwarskotor/img/swkotor-header.jpg b/shrines/starwarskotor/img/swkotor-header.jpg new file mode 100644 index 00000000..255a0ec6 Binary files /dev/null and b/shrines/starwarskotor/img/swkotor-header.jpg differ diff --git a/shrines/starwarskotor/index.html b/shrines/starwarskotor/index.html new file mode 100644 index 00000000..07fd9629 --- /dev/null +++ b/shrines/starwarskotor/index.html @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + Star Wars: Knights of the Old Republic Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    Welcome to my Star Wars: Knights of the Old Republic Shrine!

    +

    Star Wars: Knights of the Old Republic (KotOR) is a space opera role-playing video game series. The series takes place in the fictional universe of Star Wars, with the story taking place approximately 4,000 years before the rise of the Galactic Empire.

    +

    The first title was developed by BioWare while the second (Star Wars: Knights of the Old Republic II: The Sith Lords) was done by Obsidian Entertainmenr. Both games were published by LucasArts. The KOTOR series also includes a subsequent new comic book series. Both comic series were published by Dark Horse Comics and act as prequels to the video games.

    +
    + +
    +

    My Connection to the KotOR Series

    +

    Even though I had been a Star Wars fan since I was 13 in 2005, I was not aware of the existence of the Knights of the Old Republic series until around 2010. I started playing the first KotOR game in early 2011, immediately followed by KotOR 2, and the series has been one of my special interests ever since.

    + +

    My investment in the KotOR series has evolved over time, leading to me starting to get into modding the games in the mid-2010s. The very first KotOR mod I created was TSL Improved Party Outfits in 2015, while the first KotOR mod I released to the public was Visas Marr and Female Exile Romance on December 15, 2016.

    + +

    I have also joined Erased Identity and Mysteries of Malachor, the fan listings for the two KotOR games.

    + + A website button of a Star Wars: Knights of the Old Republic fanlisting + A website button of a Star Wars: Knights of the Old Republic 2 fanlisting +
    +
    + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/starwarskotor/resources/index.html b/shrines/starwarskotor/resources/index.html new file mode 100644 index 00000000..00d268b4 --- /dev/null +++ b/shrines/starwarskotor/resources/index.html @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + Resources | Star Wars: Knights of the Old Republic Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    Star Wars: Knights of the Old Republic Resources

    +

    Here are resources for the Star Wars: Knights of the Old Republic series I have compiled myself.

    +
    + +
    +

    My Mods

    +

    Here are the modifications for the KotOR series I have created.

    + +
    + +
    +

    My Modder's Resource

    + +
    + + + + + + + +
    +

    My Mod Builds

    +

    Lists of modifications for the KotOR games I use for my own playthroughs.

    + +
    + +
    + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/starwarskotor/resources/kotor-same-gender-romance-mods.html b/shrines/starwarskotor/resources/kotor-same-gender-romance-mods.html new file mode 100644 index 00000000..d137bedd --- /dev/null +++ b/shrines/starwarskotor/resources/kotor-same-gender-romance-mods.html @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + Same-Gender Romance Mods for KotOR Series | Resources | Star Wars: Knights of the Old Republic Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    List of Same-Gender Romance Mods for Star Wars: Knights of the Old Republic Series

    + +

    [This list is also available on Google Docs]

    +

    The first Star Wars: Knights of the Old Republic video game introduced Juhani, the very first confirmed gay character in any Star Wars media, including Legends, the old Star Wars Expanded Universe, and the very first canon same-gender romance option in any BioWare game. However, the KotOR series at large has little LGBTQ+ content, and except for Juhani, none of the romance options in both KotOR games are available for same-gender romances.

    + +

    Therefore, throughout the years, modders of the KotOR games have created various mods adding more same-gender romance options and content to the games to fill the void.

    + +

    Below is a list of all the same-gender romance mods that had been created for the KotOR game series throughout KotOR’s modding history, sorted by their original release dates in chronological order.

    + +

    Wanting to make your KotOR games more gay? Then this list is for you! This list also serves as an archive to document the history of same-gender romance mods for the KotOR series. Happy gayming!

    + +

    NOTE: Some listed mods below have overlapping concepts and thus are not compatible with each other. Mods that are hosted exclusively on Gamefront are very old mods that were made in the 2000s, and thus may have compatibility issues with newer mods (not just ones that listed here).

    + +

    Warning: this list contains spoilers for both KotOR games.

    +
    + +
    +

    For Knights of the Old Republic I

    + +

    Bastila & Female Revan (Untold Love Story)

    +
      +
    • Mod Author: Master Kavar
    • +
    • Original Release Date: November 25, 2006
    • +
    • Download: Gamefront
    • +
    • Mod Description: Allows female Revan to romance Bastila. In addition, this mod also allows female Revan to flirt with certain female NPCs, most notably Yuthura Ban.
    • +
    + +

    The Romancing of Bastila

    +
      +
    • Mod Author: Darth Shan & Swfan28
    • +
    • Original Release Date: March 10, 2009
    • +
    • Download: Gamefront
    • +
    • Mod Description: Compiles several Bastila content mods into one mod. Regarding Bastila’s romance, in addition to allowing female Revan to romance Bastila, this mod also includes bug fixes and a kissing scene between Bastila and female Revan.
    • +
    • Installation Note: If you want to use this mod with Bastila & Female Revan (Untold Love Story), you must install this mod AFTER Untold Love Story, and override the k_hbas_dialog.dlg file when prompted.
    • +
    + +

    Party on the Leviathan!

    +
      +
    • Mod Author: Fair Strides
    • +
    • Original Release Date: July 2, 2015
    • +
    • Download: Deadly Stream
    • +
    • Mod Description: Restores Juhani’s conversation, including romance conversation with a female player character, on the Leviathan, by spawning the rest of the Ebon Hawk crew on the Leviathan after you are rescued.
    • +
    + +

    Bi Carth

    +
      +
    • Mod Author: forgetcanon
    • +
    • Original Release Date: July 20, 2015
    • +
    • Download: Deadly Stream | Nexus Mods
    • +
    • Mod Description: Allows Male Revan to romance Carth and flirt with certain male NPCs.
    • +
    + +

    Juhani Romance Enhancement

    +
      +
    • Mod Author: Kexikus
    • +
    • Original Release Date: January 4, 2016
    • +
    • Download: Deadly Stream | Nexus Mods
    • +
    • Mod Description: Improves the final romance conversation with Juhani, including triggering the conversation automatically, provided the conditions for this conversation are met, as well as adding a kiss between Juhani and female Revan.
    • +
    • Note: For details on how to successfully complete Juhani’s romance, please check out my Juhani Romance Guide.
    • +
    + +

    JC’s Romance Enhancement: Biromantic Bastila for K1

    +
      +
    • Mod Author: JCarter426
    • +
    • Original Release Date: January 19, 2020
    • +
    • Download: Deadly Stream
    • +
    • Mod Description: Another mod that allows female Revan to romance Bastila, but what makes this mod different is that it also further edits Bastila’s dialogue so Bastila would not refer to female Revan as a man. This mod also fixes the bugs with Bastila’s romance during the endgame.
    • +
    + +

    JC's Romance Enhancement: Pan-Galactic Flirting for K1

    +
      +
    • Mod Author: JCarter426
    • +
    • Original Release Date: July 6, 2022
    • +
    • Download: Deadly Stream
    • +
    • Mod Description: Allows the player to flirt with several NPCs regardless of gender.
    • +
    • Note: This mod is essentially a modern and improved version of Bastila & Female Revan (Untold Love Story). What makes JCarter426’s mod better is the fact that this mod uses an installer tool (TSLPatcher) to patch relevant dialogue files to improve compatibility with other mods, compared to Untold Love Story's installation method of putting dialogue files into the Override folder, which increases the chance of causing conflict with other mods.
    • +
    + +

    Carth Onasi and Male PC Romance

    +
      +
    • Mod Author: Leilukin (me)
    • +
    • Original Release Date: August 6, 2022
    • +
    • Download: Deadly Stream | Nexus Mods
    • +
    • Mod Description: Inspired by the aforementioned Bi Carth mod, this is my version of a male Revan and Carth romance mod. The biggest differences between my version and forgetcanon’s are that my mod is installed by patching relevant dialogue files, instead of putting modified dialogue files in the Override folder, and I have also edited Carth’s dialogue and spliced audio files to prevent Carth from referring to male Revan as a woman.
    • +
    +
    + +
    +

    For Knights of the Old Republic II: The Sith Lords

    + +

    Worthy of Note:

    +

    Stoffe’s Handmaiden Choice for Females mod (originally released on April 23, 2005), which was the first mod ever made that allowed female Exiles to recruit Handmaiden as a party member, could technically be considered a same-gender romance mod, due to the fact that with this mod, female Exiles would also be able to romance Handmaiden by having her as a party member.

    +

    In addition, since Handmaiden replaces Disciple’s place on the Ebon Hawk crew in this mod, this mod also allows female Exiles to get the Visas romance scene after the Rebuilt Jedi Enclave sequence.

    +

    That being said, these are all side effects of Handmaiden being exclusive to male Exiles in the vanilla game. Handmaiden Choice for Females was not intentionally made with same-gender romances in mind.

    +

    Hassat Hunter had remade the mod into Handmaiden 4 Females - Disciple for Males (originally released on March 14, 2014) to be compatible with The Sith Lords Restored Content Mod (TSLRCM). However, the mod is outdated and no longer supported.

    + +

    Alternate Revan Romances

    +
      +
    • Mod Author: felixfelicitas
    • +
    • Original Release Date: March 9, 2015
    • +
    • Download: Deadly Stream | Nexus Mods
    • +
    • Mod Description: Allows players to set Revan’s love interest(s), instead of letting the game assume male Revan is romantically involved with Bastila, while female Revan is romantically involved with Carth. Most notably, with this mod, Bastila can be chosen as female Revan’s love interest, and Carth can be chosen as male Revan’s love interest.
    • +
    • Required Mod: The Sith Lords Restored Content Mod (TSLRCM)
    • +
    • WARNING: This mod is outdated, and it has game-breaking bugs. Use my REDUX version of the mod below instead. I am listing the original mod here for historical record purpose.
    • +
    + +

    Visas Marr and Female Exile Romance

    +
      +
    • Mod Author: Leilukin (me)
    • +
    • Original Release Date: December 15, 2016
    • +
    • Download: Deadly Stream | Nexus Mods
    • +
    • Mod Description: Makes the Visas romance scene, which occurs near the endgame, available for the Exile regardless of gender.
    • +
    + +

    Atton Rand and Male Exile Romance

    + + +

    Handmaiden & Female Exile - Disciple & Male Exile Romance

    +
      +
    • Mod Author: Leilukin (me)
    • +
    • Original Release Date: January 2, 2017
    • +
    • Download: Deadly Stream | Nexus Mods
    • +
    • Mod Description: In addition to allowing Handmaiden to join a female Exile’s party and allowing Disciple to join a male Exile’s party, this mod also makes Handmaiden a romance option for a female Exile, and Disciple for a male Exile. It is worth noting that by allowing Handmaiden to join a female Exile, this mod also enables romantic subtext between Atris and the female Exile.
    • +
    • Required Mod: The Sith Lords Restored Content Mod (TSLRCM)
    • +
    + +

    Darth Sion and Male Exile Mod

    + + +

    Alternate Revan Romances REDUX

    +
      +
    • Mod Author: Leilukin (me), original mod made by felixfelicitas
    • +
    • Original Release Date: January 26, 2017
    • +
    • Download: Deadly Stream | Nexus Mods
    • +
    • Mod Description: My updated version of the Alternate Revan Romances mod, released with felixfelicitas’ permission. My mod fixes many bugs with the original version.
    • +
    • Required Mod: The Sith Lords Restored Content Mod (TSLRCM)
    • +
    + +

    Dahnis Flirt Option for Female PC

    +
      +
    • Mod Author: Leilukin (me)
    • +
    • Original Release Date: November 10, 2018
    • +
    • Download: Deadly Stream | Nexus Mods
    • +
    • Mod Description: Makes Dahnis, a minor NPC and one of the Pazaak players on Nar Shaddaa, flirt with the player character regardless of gender.
    • +
    +
    +
    + + + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/starwarskotor/resources/kotor2-female-exile-recruit-handmaiden-mods.html b/shrines/starwarskotor/resources/kotor2-female-exile-recruit-handmaiden-mods.html new file mode 100644 index 00000000..47dff006 --- /dev/null +++ b/shrines/starwarskotor/resources/kotor2-female-exile-recruit-handmaiden-mods.html @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + List of KotOR 2 Mods that Allow Female Exiles to Recruit the Handmaiden as a Party Member | Resources | Star Wars: Knights of the Old Republic Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    List of Star Wars: Knights of the Old Republic II: The Sith Lords Mods that Allow Female Exiles to Recruit the Handmaiden as a Party Member

    + +

    One of the flaws of Star Wars: Knights of the Old Republic II: The Sith Lords (KotOR 2) I believe everyone, regardless of how much you like the game (or not), will agree on, is that the Handmaiden, real name Brianna, will only join your party if you play as a male Jedi Exile. The idea of a potential party member only joins you based on your player character's gender already makes little to no sense to begin with, and it does not help that Star Wars Legends, the old Star Wars Expanded Universe, established that both Brianna the Handmaiden and Mical the Disciple join the female Exile's crew.

    + +

    However, the good news is, there are actually mods that allow female Exiles to recruit Brianna the Handmaiden as a party member. Unfortunately, despite the fact that such mods have already existed since the 2000s, there are still KotOR 2 fans who do not know the existence of such mods, which is why I am making this list. Brianna is an amazing character with an interesting story, so I highly recommend you to have at least one playthrough with Brianna as your companion regardless of your Exile’s gender.

    + +

    These are the mods that allow female Exiles to recruit Brianna the Handmaiden as a party member:

    + +

    Handmaiden Choice for Females by Stoffe

    + +

    Released on April 23, 2005, Stoffe's Handmaiden Choice for Females was the very first mod that gives female Exiles the option to recruit the Handmaiden. However, it is not compatible with The Sith Lords Restored Content Mod (TSLRCM), as it was created and released years before TSLRCM. In addition, even with this mod, Handmaiden still refers to a female Exile with “he/him” pronouns, which some people (myself included) would find very immersion-breaking

    + +

    Handmaiden 4 Females - Disciple 4 Males by Hassat Hunter

    + +

    Released on March 14, 2014, Hassat Hunter made Handmaiden 4 Females - Disciple 4 Males based on Stoffe's Handmaiden Choice for Females, so the mod would be compatible with The Sith Lords Restored Content Mod (TSLRCM). However, this version retains the flaw of Handmaiden still referring to a female Exile with “he/him” pronouns. Additioally, the mod is outdated and no longer supported.

    + +

    PartySwap by DarthTyren

    + +

    This mod fixes any potential gender and pronouns mix-up by adding gender checks to dialogues that references the Exile’s gender, which, however, also prevents female Exiles from getting any dialogue that references any potential romantic feelings between the female Exile and the Handmaiden or Atris (similarly, if you play as a male Exile, you will not get any dialogue that references any potential romance between you and the Disciple). Therefore, if you also want to romance the Handmaiden as a female Exile (or romance the Disciple as a male Exile), I would recommend checking out the below mod as well.

    + +

    Handmaiden and Female Exile - Disciple and Male Exile Romance by Leilukin

    + +

    My mod, released on January 2, 2017. As the mod name suggests, this mod allows you to recruit and romance the Handmaiden as a female Exile, ditto for the Disciple as a male Exile. My mod also requires The Sith Lords Restored Content Mod (TSLRCM) to work.

    +

    My mod fixes any potential gender/pronouns mix-up by editing dialogue and splicing audio, so users of my mod can fully enjoy the Handmaiden and the Disciple's romance content without worrying about their Exile getting misgendered.

    +

    The default installation option of my mod will make the Handmaiden automatically joins a female Exile, and the Disciple automatically joins a male Exile. That said, my mod also provides an installation option to make my mod compatible with DarthTyren's PartySwap mod.

    + +

    Final Note

    +

    It is very important to note when it comes to installing mods for KotOR 2, I do NOT recommend using the Steam Workshop, including the Steam Workshop version of The Sith Lords Restored Contente Mod. because frankly, the Steam Workshop is a mod compatibility nightmare for games like KotOR 2. I recommend reading this post: Why NOT to Use the Steam Workshop.

    +
    +
    + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/starwarskotor/resources/tslrcm-m478ep-modules-music.html b/shrines/starwarskotor/resources/tslrcm-m478ep-modules-music.html new file mode 100644 index 00000000..e08d2d0c --- /dev/null +++ b/shrines/starwarskotor/resources/tslrcm-m478ep-modules-music.html @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + TSLRCM + M4-78EP Modules, Warp Codes & Music Overview | Resources | Star Wars: Knights of the Old Republic Shrine | Leilukin's Hub + + + +
    +
    + + +
    + +
    + + + +
    +
    +

    The Sith Lords Restored Content Mod + M4-78 Enhancement Project Modules, Warp Codes & Music Overview

    + +

    [Originally posted on Deadly Stream forums]

    + +

    In 2017, modder Kexikus created a spreadsheet to list all of The first Knights of the Old Republic game's modules and their corresponding Day, Night and Battle music. Sith Holocron, who is also a modder, requested a Knights of the Old Republic II: The Sith Lords version of such list, though none of the sort has been made, so I decided to volunteer the task myself.

    + +

    Here you go:

    + +

    The Sith Lords Restored Content Mod (TSLRCM) + M4-78 Enhancement Project (M4-78EP) modules and music overview spreadsheet

    + +

    This spreadsheet covers all the modules from both TSLRCM and M4-78EP. Like in K1, the module codes can be used for the warp cheat code (for example, warp 003EBO).

    + +

    All music tracks are listed with their number corresponding to their row in ambientmusic.2da, their file name (the music files can be found in the StreamMusic folder) and their track title as identified with their TLK (dialog.tlk) StrRef. I have also included previews of the music by linking to YouTube in the spreadsheet.

    + +

    Hope you will find this spreadsheet helpful. Enjoy!

    +
    +
    + +
    + +
    + + + \ No newline at end of file diff --git a/shrines/starwarskotor/starwarskotor.css b/shrines/starwarskotor/starwarskotor.css new file mode 100644 index 00000000..3231a053 --- /dev/null +++ b/shrines/starwarskotor/starwarskotor.css @@ -0,0 +1,355 @@ +:root { + --header-image: url('./img/swkotor-header.jpg'); + --body-color: #fceaff; + --body-bg: #212121; + --content-bg: #000000; + --content: #43256E; + --title-color: #ffc400; + --title-border: #ffe387; + --code-bg: #241445; + --code-border: #e4dbbe; + --link-color: #bb9671; + --link-hover: #94575a; + --blockquote-bg: #2f2d2d; + --blockquote-border: #4d4385; + --box-bg: #13092D; +} + +@font-face { + font-family: 'Nunito'; + src: url('/assets/fonts/Nunito-VariableFont_wght.ttf') format("truetype"); + font-weight: 125 950; + font-stretch: 75% 125%; + font-style: normal; +} + +@font-face { + font-family: 'Nunito'; + src: url('/assets/fonts/Nunito-Italic-VariableFont_wght.ttf') format("truetype"); + font-weight: 125 950; + font-stretch: 75% 125%; + font-style: italic; +} + +html, +body { +scroll-behavior: smooth; +} + +body { + font-family: 'Nunito', Arial, sans-serif; + font-size: 16px; + margin: 0; + background-color: var(--body-bg); + background-size: 65px; + color: var(--body-color); + background-image: var(--body-bg-image); + background-attachment: fixed; + line-height: 1.6; +} + +* { + box-sizing: border-box; +} + +h1, +h2, +h3 { + color: var(--title-color); +} + +h1 { + font-size: 2.2rem; + border-bottom: 3px solid var(--title-border); + padding-bottom: 8px; +} + +h1:not(:first-child) { + padding-top: 30px; +} + +h2 { + font-size: 1.7rem; +} + +strong { + color: var(--title-color); +} + +hr { + width: 75%; + margin-top: 1.5rem; + margin-bottom: 1.5rem; +} + +blockquote { + border-left: var(--blockquote-border) 3px solid; + background: var(--blockquote-bg); + padding: 0.1px 0.75rem; + margin: 0 1.5rem; +} + +.linkBtn { + font: 1.1rem 'Source Sans Pro', Arial, sans-serif; + border: 2px solid var(--link-color); + border-radius: 10px; + padding: 12px 16px; + margin: 0.25em 0.15em; + background: none; + color: var(--link-color); + cursor: pointer; + font-weight: 700; + text-transform: uppercase; +} + +.linkBtn:hover { + cursor:pointer; + color: white; + background-color: var(--link-color); + transition: 0.5s; +} + +span.monospace { + font-family: monospace; + border: 1px solid var(--code-border); + padding: 2px 5px; + margin-left: 2px; + margin-right: 2px; + background-color: var(--code-bg); +} + +.code-snippet { + background-color: var(--code-bg); + border: 1px solid var(--code-border); + display: block; + padding: 0.5em; + overflow-x: auto; + word-break: break-all; +} + +.box { + background-color: var(--box-bg); + border: 1px solid var(--title-color); + padding: 10px; +} + +.full-width-youtube-video { + position: relative; + padding-bottom: 56.25%; + height: 0; +} + +.full-width-youtube-video iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + + +/* CONTAINER for wrapping the entire website */ +#container { + max-width: 1100px; + /* the width of the layout */ + /* if you change the above value, scroll to the bottom +and change the media query according to the comment! */ + margin: 0 auto; + /* this centers the entire page */ +} + +/* For all links on your page EXCEPT for the navigation */ +#container a { + color: var(--link-color); + font-weight: bold; +} + +#container a:hover { + color: var(--link-hover); +} + +#header { + width: 100%; + background-color: var(--content-bg); + height: 500px; + background-image: var(--header-image); + background-size: 100%; + background-repeat: no-repeat; + background-position: center; +} + +/* NAVIGATION SECTION */ +.sticky-nav { + position: fixed; + top: 0; + max-width: 900px; +} + +#navbar { + height: 40px; + background-color: var(--content-bg); + width: 100%; + margin-bottom: 10px; + z-index: 999; +} + +#navbar ul { + display: flex; + padding: 0; + margin: 0; + list-style-type: none; + justify-content: space-evenly; +} + +#navbar li { + padding-top: 10px; +} + +#navbar li a { + color: var(--link-color); + /* navbar text color */ + font-weight: 800; + text-decoration: none; + /* this removes the underline */ +} + +#navbar li a:hover { + color: var(--link-hover); + text-decoration: underline; +} + +#flex { + display: flex; +} + +/* EXTRAS */ +#topBar { + width: 100%; + height: 30px; + padding: 10px; + font-size: smaller; + background-color: var(--box-bg); +} + +/* MAIN CONTENT AREA, between the sidebars */ +main { + font-size: 1.2rem; + flex: 1; + order: 2; +} + +.content-section { + background-color: var(--content-bg); + padding: 20px; +} + +.content-section:not(:first-child) { + margin-top: 10px; +} + +/* This colors BOTH sidebars +If you want to style them separately, +create styles for #leftSidebar and #rightSidebar */ +aside { + background-color: var(--content-bg); + width: 200px; + padding: 20px; + font-size: smaller; + /* this makes the sidebar text slightly smaller */ +} + +aside h1, aside h2, aside h3 { + margin-bottom: 0; +} + +aside ul { + margin-top: 0.5rem; +} + +aside .box ul { + padding-left: 10px; +} + +#leftSidebar { + order: 1; + margin-right: 10px; +} + +#rightSidebar { + order: 3; + margin-left: 10px; +} + +.sidebar-content { + position: sticky; + top: 40px; + font-size: 0.9rem; +} + +/* TABLE OF CONTENTS */ + +.toc-title { + font-size: 1.3rem; + font-weight: bold; +} + +.toc-list { + list-style: none; + margin-left: 0; + padding-left: 0; + font-size: 1rem; +} + +.toc-list li { + margin-bottom: 0.5em; +} + + +/* FOOTER */ + +footer { + background-color: var(--content-bg); + width: 100%; + height: 40px; + padding: 10px; + text-align: center; + margin-top: 10px; +} + + +/* MEDIA QUERY STARTS HERE */ + +/* To keep things responsive, +if you want to change the width of your page, +take your new width of the #container, and then subtrack it by 100. +Use this new number as the "max-width" value below */ + +@media only screen and (max-width: 1000px) { + #flex { + flex-wrap: wrap; + } + + aside { + width: 100%; + } + + /* the order of the items is adjusted here for responsiveness. + since the sidebars would be too small on a mobile device. */ + main { + order: 2; + } + + #leftSidebar { + order: 3; + margin-right: 10px; + } + + #rightSidebar { + order: 1; + margin-left: 10px; + } + + #navbar ul { + flex-wrap: wrap; + } +} \ No newline at end of file diff --git a/shrines/starwarskotor/starwarskotor.js b/shrines/starwarskotor/starwarskotor.js new file mode 100644 index 00000000..c78fc6f7 --- /dev/null +++ b/shrines/starwarskotor/starwarskotor.js @@ -0,0 +1,21 @@ +/* --- SCRIPT FOR THE NAVIGATION BAR --- */ +var navBarHTML = ` + +`; + +document.querySelector("#navbar").innerHTML = navBarHTML; + + +/* --- SCRIPT FOR THE RIGHT SIDEBAR --- */ +var leftSidebarHTML = ` +

    About

    +

    Star Wars: Knights of the Old Republic is a space opera role-playing video game series that takes place in the Star Wars universe. The story takes place approximately 4,000 years before the rise of the Galactic Empire.

    +`; + +document.querySelector("#leftSidebarContent").innerHTML = leftSidebarHTML; \ No newline at end of file diff --git a/sitemap.html b/sitemap.html new file mode 100644 index 00000000..143211a0 --- /dev/null +++ b/sitemap.html @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + Site Map | Leilukin's Hub + + + +
    +
    + +
    + +
    + + + +
    +

    Site Map

    +

    This page lists the links to the pages on my website for easier navigation.

    + + + +
    + +
    + +
    + + + \ No newline at end of file