Guess who's taking shape.
|
@ -0,0 +1,19 @@
|
|||
Copyright (c) 2021 Marisa Kirisame, UnSX Team
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1 @@
|
|||
This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
|
|
@ -39,7 +39,7 @@ There are four weapons available throughout your journey, one of which you alrea
|
|||
|
||||
Fight your enemies with your own body. This shouldn't be very effective considering **Kirin**'s physical form, but it's helpful in a pinch.
|
||||
|
||||
Primary fire alternates between two quick jabs and a hook. This has some decent staggering potential, and can quickly push back small foes. Secondary fire opts for a swift side-sweeping kick. This is where **Kirin**'s lower body strength shines, pushing real hard against rows of enemies. This kick can also be quickly delivered while using other weapons through a dedicated keybind.
|
||||
Primary fire alternates between two quick jabs and a hook. This has some decent staggering potential, and can quickly push back small foes. Secondary fire opts for a swift side-sweeping kick. This is where **Kirin**'s lower body strength shines, pushing real hard against rows of enemies.
|
||||
|
||||
The reload and zoom functions allow you to block and parry respectively. Blocking is mostly effective, thanks to the armored lining of your suit, especially around the cuffs. Parrying, if timed well, will leave an enemy stunned for a short period of time, upon which any damage to them is amplified. It is not possible to parry projectiles, you are not **Demo-chan**, nor know exactly how they can even do such a thing.
|
||||
|
||||
|
@ -59,7 +59,7 @@ Like any **Anarukon** firearm, the weapon not only needs to be reloaded with mor
|
|||
|
||||
Another usual **Anarukon** sidearm, often seen in the hands of mercenaries. At 5mm, it definitely doesn't have as much stopping power as the **Rykha**, but it can deliver the pain much faster and with lower recoil. Each magazine holds a whopping 20 rounds. **Kirin** can carry up to 80 rounds in total.
|
||||
|
||||
Primary fire does what one would expect, while secondary lets **Kirin** be a bit of a naughty boy and temporarily imbue the weapon with a poison enchantment, which will transfer to each fired bullet for a limited time.
|
||||
Primary fire shoots alternating between each barrel at a steady rate, while secondary fire engages a *"dual-shot"* mode, which rapidly discharges both sides of the magazine. Only a select few models of the **Xei** have this feature, however, due to the complexity of its implementation.
|
||||
|
||||
As per usual, this weapon also has to be replenished with mana through the same method as the pistol, although due to its lower muzzle energy the mana supply tends to last much longer, and dry-firing isn't as damaging.
|
||||
|
||||
|
@ -67,7 +67,7 @@ As per usual, this weapon also has to be replenished with mana through the same
|
|||
|
||||
*"A genuine Sokana piece, it is an honor to wield it."*
|
||||
|
||||
This is basically an over-under shotgun powered by magic, designed by famed gunsmith **Irai Sokana**, grandmother of one of **Kirin**'s maids. Each cartridge comes packed with several iron pellets and a charge of pyromantic salt. **Kirin** can carry up to 20 cartridges in total.
|
||||
This is basically an over-under shotgun powered by magic, designed by famed gunsmith **Irai Sokana**, grandmother of one of **Kirin**'s maids. Each cartridge comes packed with several iron pellets and a charge of pyromantic salt. **Kirin** can carry up to 18 cartridges in total.
|
||||
|
||||
Primary fire shoots the top barrel, while secondary fire shoots the bottom barrel. Due to the employment of solidified pyromantic mana, a potent burst of flame will be released with each shot, making attacks at point blank deal A LOT of fire damage. Pressing the zoom key toggles a *"linked fire"* mode, where either trigger press will fire both barrels at once.
|
||||
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
Title music:
|
||||
Aviators - Let There Be Fire (Instrumental)
|
||||
[https://soundoftheaviators.bandcamp.com/]
|
|
@ -0,0 +1,27 @@
|
|||
// shared cvars
|
||||
nosave float kirin_flashstrength = 1.0;
|
||||
user float kirin_bumpstrength = 1.0;
|
||||
nosave int kirin_hudmargin = 10;
|
||||
nosave int kirin_maxshown = 4;
|
||||
nosave int kirin_maxshownbig = 10;
|
||||
nosave int kirin_maxpickup = 5;
|
||||
nosave int kirin_chatduration = 25;
|
||||
nosave int kirin_msgduration = 5;
|
||||
nosave int kirin_pickduration = 3;
|
||||
nosave bool kirin_shaders = true;
|
||||
server bool kirin_blood = true;
|
||||
server int kirin_maxblood = 400;
|
||||
server int kirin_maxgibs = 100;
|
||||
server int kirin_maxcasings = 200;
|
||||
server int kirin_maxdebris = 500;
|
||||
nosave bool kirin_fuzz = true;
|
||||
server bool kirin_shadows = true;
|
||||
nosave int kirin_shadowdist = 2000;
|
||||
nosave int kirin_forcestats = 1;
|
||||
server int kirin_drlaskill = 3;
|
||||
nosave bool kirin_weapontooltips = true;
|
||||
nosave string kirin_tooltipshown = "";
|
||||
nosave noarchive bool kirin_tooltipnote = false;
|
||||
nosave bool kirin_mm_enable = true;
|
||||
nosave int kirin_playtime = 0;
|
||||
// mod-specific cvars
|
|
@ -0,0 +1 @@
|
|||
Hexen
|
|
@ -0,0 +1,3 @@
|
|||
STARTUPCOLORS = "FF A0 00", "80 00 00"
|
||||
STARTUPTITLE = "RED STAR OF INNOCENCE"
|
||||
STARTUPTYPE = "Doom"
|
|
@ -0,0 +1,78 @@
|
|||
HardwareShader Texture "graphics/tempbg.png"
|
||||
{
|
||||
Shader "shaders/glsl/Fuzz.fp"
|
||||
Texture "noisetex" "textures/graynoise.png"
|
||||
Define "KIRINCOLORS"
|
||||
}
|
||||
HardwareShader Texture "graphics/KirinLogo.png"
|
||||
{
|
||||
Shader "shaders/glsl/KirinLogoAnimated.fp"
|
||||
Texture "LogoTex" "graphics/KirinLogo_Layers.png"
|
||||
}
|
||||
HardwareShader PostProcess beforebloom
|
||||
{
|
||||
Name "kirinsigil1"
|
||||
Shader "shaders/pp/KirinSigil.fp" 330
|
||||
Texture basetex "graphics/kirinsigil.png"
|
||||
Texture fadetex "graphics/kirinsigil_fade.png"
|
||||
Texture glowtex "graphics/kirinsigil_bloom.png"
|
||||
Texture noisetex "textures/rgbnoise.png"
|
||||
Uniform float timer
|
||||
}
|
||||
HardwareShader PostProcess beforebloom
|
||||
{
|
||||
Name "kirinsigil2"
|
||||
Shader "shaders/pp/KirinSigilBlur.fp" 330
|
||||
}
|
||||
HardwareShader PostProcess beforebloom
|
||||
{
|
||||
Name "kirinsigil3"
|
||||
Shader "shaders/pp/KirinSigilSmoke.fp" 330
|
||||
Texture smoketex "graphics/kirinsigil_smoke.png"
|
||||
Texture glowtex "graphics/kirinsigil_smokeglow.png"
|
||||
Uniform float timer
|
||||
}
|
||||
HardwareShader Texture "graphics/title_kirin.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_kirin_eye.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_kirin_flame.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear_wave.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_0.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_1.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_2.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_3.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_4.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_5.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_6.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
||||
HardwareShader Texture "graphics/title_smoke_7.png"
|
||||
{
|
||||
Shader "shaders/glsl/Bilinear.fp"
|
||||
}
|
After Width: | Height: | Size: 129 B |
After Width: | Height: | Size: 237 B |
After Width: | Height: | Size: 129 B |
After Width: | Height: | Size: 142 B |
After Width: | Height: | Size: 138 B |
After Width: | Height: | Size: 143 B |
After Width: | Height: | Size: 83 B |
After Width: | Height: | Size: 139 B |
After Width: | Height: | Size: 129 B |
After Width: | Height: | Size: 129 B |
After Width: | Height: | Size: 121 B |
After Width: | Height: | Size: 116 B |
After Width: | Height: | Size: 93 B |
After Width: | Height: | Size: 90 B |
After Width: | Height: | Size: 141 B |
After Width: | Height: | Size: 97 B |
After Width: | Height: | Size: 94 B |
After Width: | Height: | Size: 147 B |
After Width: | Height: | Size: 97 B |
After Width: | Height: | Size: 103 B |
After Width: | Height: | Size: 169 B |
After Width: | Height: | Size: 85 B |
After Width: | Height: | Size: 84 B |
After Width: | Height: | Size: 220 B |
After Width: | Height: | Size: 80 B |
After Width: | Height: | Size: 90 B |
After Width: | Height: | Size: 69 B |
After Width: | Height: | Size: 79 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 150 B |
After Width: | Height: | Size: 85 B |
After Width: | Height: | Size: 84 B |
After Width: | Height: | Size: 80 B |
After Width: | Height: | Size: 80 B |
After Width: | Height: | Size: 188 B |
After Width: | Height: | Size: 68 B |
After Width: | Height: | Size: 72 B |
After Width: | Height: | Size: 150 B |
After Width: | Height: | Size: 85 B |
After Width: | Height: | Size: 85 B |
After Width: | Height: | Size: 93 B |
After Width: | Height: | Size: 209 B |
After Width: | Height: | Size: 93 B |
After Width: | Height: | Size: 71 B |
After Width: | Height: | Size: 81 B |
After Width: | Height: | Size: 140 B |
After Width: | Height: | Size: 95 B |
After Width: | Height: | Size: 95 B |
After Width: | Height: | Size: 374 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 413 B |
After Width: | Height: | Size: 1.2 MiB |
After Width: | Height: | Size: 174 KiB |
After Width: | Height: | Size: 5.2 MiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 78 B |
After Width: | Height: | Size: 81 B |
After Width: | Height: | Size: 80 B |
After Width: | Height: | Size: 79 B |
After Width: | Height: | Size: 78 B |
After Width: | Height: | Size: 71 B |
After Width: | Height: | Size: 80 B |
After Width: | Height: | Size: 85 B |
After Width: | Height: | Size: 240 B |
After Width: | Height: | Size: 194 B |
After Width: | Height: | Size: 705 B |
After Width: | Height: | Size: 357 KiB |
After Width: | Height: | Size: 825 KiB |
After Width: | Height: | Size: 125 KiB |
After Width: | Height: | Size: 108 KiB |
After Width: | Height: | Size: 140 KiB |
After Width: | Height: | Size: 369 B |
After Width: | Height: | Size: 485 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 83 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,17 @@
|
|||
addkeysection "$KIRIN_KEYS" "KIRIN_XANAI"
|
||||
addmenukey "$KIRIN_PRIMARYFIRE" "+attack"
|
||||
addmenukey "$KIRIN_SECONDARYFIRE" "+altattack"
|
||||
addmenukey "$KIRIN_RELOADFIRE" "+reload"
|
||||
addmenukey "$KIRIN_ZOOMFIRE" "+zoom"
|
||||
addmenukey "$KIRIN_MELEE" "+user1"
|
||||
addmenukey "$KIRIN_EXTRAFIRE" "+user4"
|
||||
addmenukey "$SWWM_MINIMAPIN" "event swwmzoomin"
|
||||
addmenukey "$SWWM_MINIMAPOUT" "event swwmzoomout"
|
||||
defaultbind "mouse1" "+attack"
|
||||
defaultbind "mouse2" "+altattack"
|
||||
defaultbind "r" "+reload"
|
||||
defaultbind "e" "+zoom"
|
||||
defaultbind "f" "+user1"
|
||||
defaultbind "g" "+user4"
|
||||
defaultbind "kp+" "event swwmzoomin"
|
||||
defaultbind "kp-" "event swwmzoomout"
|
|
@ -0,0 +1,11 @@
|
|||
[default]
|
||||
// tags, pickups
|
||||
T_KIRIN = "Kirin Xanai";
|
||||
// quit messages
|
||||
QUITMSG = "Farewell, brave soul...";
|
||||
// misc
|
||||
KIRIN_TITLEPRESENTSA = "UnSX Team";
|
||||
KIRIN_TITLEPRESENTSB = "presents";
|
||||
KIRIN_TITLEMODBYA = "a mod by";
|
||||
KIRIN_TITLEMODBYB = "Marisa Kirisame";
|
||||
// weapon tooltips
|
|
@ -0,0 +1,42 @@
|
|||
[default]
|
||||
// keybinds
|
||||
KIRIN_KEYS = "RED STAR OF INNOCENCE Bindings";
|
||||
KIRIN_PRIMARYFIRE = "Primary Fire";
|
||||
KIRIN_SECONDARYFIRE = "Secondary Fire";
|
||||
KIRIN_RELOADFIRE = "Reload / Block";
|
||||
KIRIN_ZOOMFIRE = "Alt Reload / Parry";
|
||||
KIRIN_MELEE = "Quick Kick";
|
||||
KIRIN_EXTRAFIRE = "Grenade";
|
||||
// skills
|
||||
KIRIN_SKCHILL="\cnBlue Star\c-";
|
||||
KIRIN_SKEASY="\cjWhite Star\c-";
|
||||
KIRIN_SKNORMAL="\cfYellow Star\c-";
|
||||
KIRIN_SKHARD="\ciOrange Star\c-";
|
||||
KIRIN_SKHARDCORE="\crRed Star\c-";
|
||||
KIRIN_SKHARDCORECONFIRM="\crAre you sure you want to do that?\nYou might get your ass kicked.\c-\n\n\cgFast monsters\n1.5x monster health & damage\n25% extra aggressiveness\nCheats are disabled\nCoop monsters will spawn\c-\n\n(Press Y for a challenge)";
|
||||
// mod menu
|
||||
KIRIN_MTITLE = "RED STAR OF INNOCENCE Options";
|
||||
KIRIN_MCREDS = "RED STAR OF INNOCENCE Credits";
|
||||
// credits
|
||||
KIRIN_CSTITLE = "UnSX Side Story: Kirin";
|
||||
KIRIN_CSTITLE2 = "Undying Born Under An Innocent Red Star";
|
||||
// Help menu
|
||||
KIRIN_HELP_NPAGE = "6";
|
||||
KIRIN_HELP_PAGE1 = "The Story So Far";
|
||||
KIRIN_HELP_PAGE1_TXT =
|
||||
"TODO";
|
||||
KIRIN_HELP_PAGE2 = "Who Is Kirin Xanai";
|
||||
KIRIN_HELP_PAGE2_TXT =
|
||||
"TODO";
|
||||
KIRIN_HELP_PAGE3 = "Emperor's Arsenal (Part 1: Weapons)";
|
||||
KIRIN_HELP_PAGE3_TXT =
|
||||
"TODO";
|
||||
KIRIN_HELP_PAGE4 = "Emperor's Arsenal (Part 2: Items)";
|
||||
KIRIN_HELP_PAGE4_TXT =
|
||||
"TODO";
|
||||
KIRIN_HELP_PAGE5 = "Emperor's Arsenal (Part 3: Powerups)";
|
||||
KIRIN_HELP_PAGE5_TXT =
|
||||
"TODO";
|
||||
KIRIN_HELP_PAGE6 = "Additional Tips";
|
||||
KIRIN_HELP_PAGE6_TXT =
|
||||
"TODO";
|
|
@ -0,0 +1,3 @@
|
|||
[default]
|
||||
KIRIN_MODVER="\cxRED STAR OF INNOCENCE\c- \cw0.1a \cu(Thu 18 Nov 21:31:08 CET 2021)\c-";
|
||||
KIRIN_SHORTVER="\cw0.1a \cu(2021-11-18 21:31:08)\c-";
|
|
@ -0,0 +1,154 @@
|
|||
OptionValue "SWWMEnemyDropType"
|
||||
{
|
||||
-1, "$SWWM_DROPS_NONE"
|
||||
0, "$SWWM_DROPS_AMMO"
|
||||
1, "$SWWM_DROPS_WEAPONS"
|
||||
}
|
||||
OptionValue "SWWMForceStats"
|
||||
{
|
||||
0, "$SWWM_STATS_DISABLED"
|
||||
1, "$SWWM_STATS_ALWAYS"
|
||||
2, "$SWWM_STATS_MAPNAME"
|
||||
}
|
||||
OptionValue "SWWMDRLASkill"
|
||||
{
|
||||
0, "$SWWM_DRLASKILL_BABY"
|
||||
1, "$SWWM_DRLASKILL_EASY"
|
||||
2, "$SWWM_DRLASKILL_NORMAL"
|
||||
3, "$SWWM_DRLASKILL_HARD"
|
||||
4, "$SWWM_DRLASKILL_NIGHTMARE"
|
||||
5, "$SWWM_DRLASKILL_TECHNOPHOBIA"
|
||||
6, "$SWWM_DRLASKILL_ARMAGEDDON"
|
||||
7, "$SWWM_DRLASKILL_ADAPTIVE"
|
||||
}
|
||||
OptionValue "SWWMPistolStart"
|
||||
{
|
||||
0, "$TXT_NO"
|
||||
1, "$SWWM_PISTOLSTART_MAP"
|
||||
2, "$SWWM_PISTOLSTART_CLUSTER"
|
||||
}
|
||||
OptionMenu "KirinOptionMenu"
|
||||
{
|
||||
Class "SWWMOptionMenu"
|
||||
Title "$KIRIN_MTITLE"
|
||||
|
||||
SafeCommand "$SWWM_CRESET", "event swwmresetcvars"
|
||||
StaticText " "
|
||||
|
||||
StaticText "$SWWM_PTITLE", "Orange"
|
||||
SWWMPlayTime "$SWWM_PLAYTIME", "kirin_playtime"
|
||||
StaticText " "
|
||||
StaticText "$SWWM_OTITLE", "Orange"
|
||||
Option "$SWWM_SHADERS", "kirin_shaders", "YesNo"
|
||||
Slider "$SWWM_FLASH", "kirin_flashstrength", 0.0, 1.0, 0.1, 1
|
||||
Slider "$SWWM_BUMP", "kirin_bumpstrength", 0.0, 1.0, 0.1, 1
|
||||
Option "$SWWM_MM_ENABLE", "kirin_mm_enable", "YesNo"
|
||||
Option "$SWWM_FORCESTATS", "kirin_forcestats", "SWWMForceStats"
|
||||
Slider "$SWWM_HUDMARGIN", "kirin_hudmargin", 0, 40, 1, 0
|
||||
Slider "$SWWM_MAXMSG", "kirin_maxshown", 1, 10, 1, 0
|
||||
Slider "$SWWM_MAXMSGBIG", "kirin_maxshownbig", 1, 20, 1, 0
|
||||
Slider "$SWWM_MAXPICK", "kirin_maxpickup", 1, 10, 1, 0
|
||||
Slider "$SWWM_CHATLEN", "kirin_chatduration", 1, 30, 1, 0
|
||||
Slider "$SWWM_MSGLEN", "kirin_msgduration", 1, 30, 1, 0
|
||||
Slider "$SWWM_PICKLEN", "kirin_pickduration", 1, 30, 1, 0
|
||||
Option "$SWWM_FUZZ", "kirin_fuzz", "YesNo"
|
||||
StaticText " "
|
||||
StaticText "$SWWM_ETITLE", "Orange"
|
||||
Option "$SWWM_SHADOWS", "kirin_shadows", "YesNo"
|
||||
ScaleSlider "$SWWM_SHADOWDIST", "kirin_shadowdist", -1, 4000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED"
|
||||
Option "$SWWM_BLOOD", "kirin_blood", "YesNo"
|
||||
ScaleSlider "$SWWM_MAXBLOOD", "kirin_maxblood", -1, 1000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED"
|
||||
ScaleSlider "$SWWM_MAXGIBS", "kirin_maxgibs", -1, 1000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED"
|
||||
ScaleSlider "$SWWM_MAXCASINGS", "kirin_maxcasings", -1, 1000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED"
|
||||
ScaleSlider "$SWWM_MAXDEBRIS", "kirin_maxdebris", -1, 1000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED"
|
||||
StaticText " "
|
||||
StaticText "$SWWM_ITITLE", "Orange"
|
||||
Option "$SWWM_WEAPONTOOLTIPS", "kirin_weapontooltips", "YesNo"
|
||||
SafeCommand "$SWWM_RESETTOOLTIPS", "event swwmresettooltips"
|
||||
StaticText " "
|
||||
StaticText "$SWWM_MCTITLE", "Orange"
|
||||
Option "$SWWM_DRLASKILL", "kirin_drlaskill", "SWWMDRLASkill"
|
||||
StaticText " "
|
||||
StaticText " "
|
||||
|
||||
}
|
||||
AddOptionMenu "OptionsMenu"
|
||||
{
|
||||
Submenu "$KIRIN_MTITLE", "KirinOptionMenu"
|
||||
Submenu "$KIRIN_MCREDS", "KirinCreditsMenu"
|
||||
}
|
||||
AddOptionMenu "OptionsMenuSimple"
|
||||
{
|
||||
Submenu "$KIRIN_MTITLE", "KirinOptionMenu"
|
||||
Submenu "$KIRIN_MCREDS", "KirinCreditsMenu"
|
||||
}
|
||||
ListMenu "MainMenu"
|
||||
{
|
||||
Class "SWWMMainMenu"
|
||||
Size Clean
|
||||
Font "BigFont", "Orange", "Gold"
|
||||
Selector "graphics/KirinIcon.png", -24, 0
|
||||
LineSpacing 36
|
||||
SWWMLogo
|
||||
Position 0, 56
|
||||
SWWMTextItemM "$MNU_NEWGAME", "n", "PlayerclassMenu"
|
||||
SWWMTextItemM "$MNU_OPTIONS", "o", "OptionsMenu"
|
||||
SWWMTextItemM "$MNU_GAMEFILES", "g", "GameFilesMenu"
|
||||
SWWMTextItemM "$MNU_INFO", "i", "ReadThisMenu"
|
||||
SWWMTextItemM "$MNU_QUITGAME", "q", "QuitMenu"
|
||||
}
|
||||
ListMenu "MainMenuTextOnly"
|
||||
{
|
||||
Class "SWWMMainMenu"
|
||||
Size Clean
|
||||
Font "BigFont", "Orange", "Gold"
|
||||
Selector "graphics/KirinIcon.png", -24, 0
|
||||
LineSpacing 36
|
||||
SWWMLogo
|
||||
Position 0, 56
|
||||
SWWMTextItemM "$MNU_NEWGAME", "n", "PlayerclassMenu"
|
||||
SWWMTextItemM "$MNU_OPTIONS", "o", "OptionsMenu"
|
||||
SWWMTextItemM "$MNU_GAMEFILES", "g", "GameFilesMenu"
|
||||
SWWMTextItemM "$MNU_INFO", "i", "ReadThisMenu"
|
||||
SWWMTextItemM "$MNU_QUITGAME", "q", "QuitMenu"
|
||||
}
|
||||
ListMenu "GameFilesMenu"
|
||||
{
|
||||
Class "SWWMCleanMenu"
|
||||
Size Clean
|
||||
Font "BigFont", "Orange", "Gold"
|
||||
Selector "graphics/KirinIcon.png", -24, 0
|
||||
LineSpacing 36
|
||||
Position 0, 88
|
||||
SWWMTextItemM "$MNU_LOADGAME", "l", "LoadGameMenu"
|
||||
SWWMTextItemM "$MNU_SAVEGAME", "s", "SaveGameMenu"
|
||||
}
|
||||
ListMenu "EpisodeMenu"
|
||||
{
|
||||
Class "SWWMBigMenuHack"
|
||||
Size Clean
|
||||
IfGame(Doom, Heretic, Hexen, Strife)
|
||||
{
|
||||
NetgameMessage "$NEWGAME"
|
||||
}
|
||||
IfGame(Chex)
|
||||
{
|
||||
NetgameMessage "$CNEWGAME"
|
||||
}
|
||||
Font "BigFont", "Gold", "Fire"
|
||||
Selector "graphics/KirinIcon.png", -24, 0
|
||||
LineSpacing 0
|
||||
SWWMStaticTextM 0, 0, "$MNU_EPISODE", "Orange"
|
||||
Position 0, 0
|
||||
}
|
||||
|
||||
ListMenu "SkillMenu"
|
||||
{
|
||||
Class "SWWMBigMenuHack"
|
||||
Size Clean
|
||||
Font "BigFont", "Gold", "Fire"
|
||||
Selector "graphics/KirinIcon.png", -24, 0
|
||||
LineSpacing 0
|
||||
SWWMStaticTextM 0, 0, "$MNU_CHOOSESKILL", "Orange"
|
||||
Position 0, 0
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
// This should act as Bilinear filtering when texture filtering is disabled
|
||||
// the algo is pretty much public domain, so no credit given
|
||||
|
||||
vec4 BilinearSample( in vec2 size, in vec2 pxsize, in vec2 pos )
|
||||
{
|
||||
vec2 f = fract(pos*size);
|
||||
pos += (.5-f)*pxsize;
|
||||
vec4 p0q0 = texture(tex,pos);
|
||||
vec4 p1q0 = texture(tex,pos+vec2(pxsize.x,0));
|
||||
vec4 p0q1 = texture(tex,pos+vec2(0,pxsize.y));
|
||||
vec4 p1q1 = texture(tex,pos+vec2(pxsize.x,pxsize.y));
|
||||
vec4 pInterp_q0 = mix(p0q0,p1q0,f.x);
|
||||
vec4 pInterp_q1 = mix(p0q1,p1q1,f.x);
|
||||
return mix(pInterp_q0,pInterp_q1,f.y);
|
||||
}
|
||||
|
||||
void SetupMaterial( inout Material mat )
|
||||
{
|
||||
vec2 size = textureSize(tex,0);
|
||||
vec2 pxsize = vec2(1./size.x,1./size.y);
|
||||
vec2 pos = vTexCoord.st;
|
||||
pos.x -= .15*sin(pos.y*13.+timer*3.3)*clamp(.9-pos.y,0.,1.);
|
||||
pos.y -= .13*cos(pos.x*9.+timer*2.4)*clamp(.9-pos.y,0.,1.);;
|
||||
mat.Base = BilinearSample(size,pxsize,pos);
|
||||
mat.Normal = ApplyNormalMap(pos);
|
||||
}
|
|
@ -0,0 +1,135 @@
|
|||
// ah shit here we go again
|
||||
|
||||
#define overlay(a,b) (a<0.5)?(2.0*a*b):(1.0-(2.0*(1.0-a)*(1.0-b)))
|
||||
#define hardlight(a,b) (2*a<1.0)?clamp(2.0*a*b,0.0,1.0):clamp(1.0-2.0*(1.0-b)*(1.0-a),0.0,1.0)
|
||||
const float pi = 3.14159265358979323846;
|
||||
|
||||
vec2 warpcoord( in vec2 uv )
|
||||
{
|
||||
vec2 offset = vec2(0,0);
|
||||
offset.x = sin(pi*2.*(uv.x*8.+timer*.5))*.01;
|
||||
offset.y += timer*.25;
|
||||
offset.x = cos(pi*2.*(uv.y*4.+timer*.5))*.01;
|
||||
return fract(uv+offset);
|
||||
}
|
||||
|
||||
vec2 warpcoord2( in vec2 uv )
|
||||
{
|
||||
vec2 offset = vec2(0,0);
|
||||
offset.y = sin(pi*2.*(uv.x*4.+timer*.25))*.01;
|
||||
offset.x = cos(pi*2.*(uv.y*2.+timer*.25))*.01;
|
||||
return fract(uv+offset);
|
||||
}
|
||||
|
||||
vec4 BilinearSampleNoWrap( in sampler2D tex, in vec2 pos, in vec2 size, in vec2 pxsize )
|
||||
{
|
||||
vec2 f = fract(pos*size);
|
||||
pos += (.5-f)*pxsize;
|
||||
vec4 p0q0 = texture(tex,pos);
|
||||
vec4 p1q0 = texture(tex,pos+vec2(pxsize.x,0));
|
||||
vec4 p0q1 = texture(tex,pos+vec2(0,pxsize.y));
|
||||
vec4 p1q1 = texture(tex,pos+vec2(pxsize.x,pxsize.y));
|
||||
vec4 pInterp_q0 = mix(p0q0,p1q0,f.x);
|
||||
vec4 pInterp_q1 = mix(p0q1,p1q1,f.x);
|
||||
return mix(pInterp_q0,pInterp_q1,f.y);
|
||||
}
|
||||
|
||||
vec4 BilinearSample( in sampler2D tex, in vec2 pos, in vec2 size, in vec2 pxsize )
|
||||
{
|
||||
vec2 disp = floor(pos*vec2(2.,4.))/vec2(2.,4.);
|
||||
vec2 f = fract(pos*size);
|
||||
pos += (.5-f)*pxsize;
|
||||
vec4 p0q0 = texture(tex,fract((pos*vec2(2.,4.)))/vec2(2.,4.)+disp);
|
||||
vec4 p1q0 = texture(tex,fract((pos+vec2(pxsize.x,0))*vec2(2.,4.))/vec2(2.,4.)+disp);
|
||||
vec4 p0q1 = texture(tex,fract((pos+vec2(0,pxsize.y))*vec2(2.,4.))/vec2(2.,4.)+disp);
|
||||
vec4 p1q1 = texture(tex,fract((pos+vec2(pxsize.x,pxsize.y))*vec2(2.,4.))/vec2(2.,4.)+disp);
|
||||
vec4 pInterp_q0 = mix(p0q0,p1q0,f.x);
|
||||
vec4 pInterp_q1 = mix(p0q1,p1q1,f.x);
|
||||
return mix(pInterp_q0,pInterp_q1,f.y);
|
||||
}
|
||||
|
||||
// based on gimp color to alpha, but simplified
|
||||
vec4 blacktoalpha( in vec4 src )
|
||||
{
|
||||
vec4 dst = src;
|
||||
float dist = 0., alpha = 0.;
|
||||
float d, a;
|
||||
a = clamp(dst.r,0.,1.);
|
||||
if ( a > alpha )
|
||||
{
|
||||
alpha = a;
|
||||
dist = d;
|
||||
}
|
||||
a = clamp(dst.g,0.,1.);
|
||||
if ( a > alpha )
|
||||
{
|
||||
alpha = a;
|
||||
dist = d;
|
||||
}
|
||||
a = clamp(dst.b,0.,1.);
|
||||
if ( a > alpha )
|
||||
{
|
||||
alpha = a;
|
||||
dist = d;
|
||||
}
|
||||
if ( alpha > 0. )
|
||||
{
|
||||
float ainv = 1./alpha;
|
||||
dst.rgb *= ainv;
|
||||
}
|
||||
dst.a *= alpha;
|
||||
return dst;
|
||||
}
|
||||
|
||||
void SetupMaterial( inout Material mat )
|
||||
{
|
||||
// store these to save some time
|
||||
vec2 size = vec2(textureSize(LogoTex,0));
|
||||
vec2 pxsize = 1./size;
|
||||
// y'all ready for this multilayered madness?
|
||||
vec2 uv = vTexCoord.st;
|
||||
// copy
|
||||
vec4 base = BilinearSample(LogoTex,warpcoord2(uv)*vec2(.5,.25),size,pxsize);
|
||||
// hard light
|
||||
vec4 tmp = BilinearSampleNoWrap(LogoTex,uv*vec2(.5,.25)+vec2(0.,.25),size,pxsize);
|
||||
base.r = hardlight(tmp.r,base.r);
|
||||
base.g = hardlight(tmp.g,base.g);
|
||||
base.b = hardlight(tmp.b,base.b);
|
||||
// add
|
||||
tmp = BilinearSampleNoWrap(LogoTex,uv*vec2(.5,.25)+vec2(0.,.5),size,pxsize);
|
||||
base.rgb += tmp.rgb;
|
||||
// color to alpha
|
||||
base = blacktoalpha(base);
|
||||
// separate layer
|
||||
tmp = BilinearSample(LogoTex,warpcoord(uv)*vec2(.5,.25)+vec2(0.,.75),size,pxsize);
|
||||
// overlay
|
||||
vec4 tmp2 = BilinearSampleNoWrap(LogoTex,uv*vec2(.5,.25)+vec2(.5,0.),size,pxsize);
|
||||
tmp.r = overlay(tmp.r,tmp2.r);
|
||||
tmp.g = overlay(tmp.g,tmp2.g);
|
||||
tmp.b = overlay(tmp.b,tmp2.b);
|
||||
// add
|
||||
tmp2 = BilinearSampleNoWrap(LogoTex,uv*vec2(.5,.25)+vec2(.5,.25),size,pxsize);
|
||||
tmp.rgb += tmp2.rgb;
|
||||
// alpha mask
|
||||
tmp.a = BilinearSampleNoWrap(LogoTex,uv*vec2(.5,.25)+vec2(.5,.5),size,pxsize).x;
|
||||
tmp.rgb *= tmp.a;
|
||||
// alpha blend
|
||||
tmp2 = BilinearSampleNoWrap(LogoTex,uv*vec2(.5,.25)+vec2(.5,.75),size,pxsize);
|
||||
vec4 tmp3;
|
||||
tmp3.a = tmp2.a+tmp.a*(1.-tmp2.a);
|
||||
tmp3.rgb = (tmp2.rgb*tmp2.a+tmp.rgb*tmp.a*(1.-tmp2.a))/tmp3.a;
|
||||
if ( tmp3.a == 0. ) tmp3.rgb = vec3(0.);
|
||||
// alpha blend back onto base layer
|
||||
tmp.a = tmp3.a+base.a*(1.-tmp3.a);
|
||||
tmp.rgb = (tmp3.rgb*tmp3.a+base.rgb*base.a*(1.-tmp3.a))/tmp.a;
|
||||
if ( tmp.a == 0. ) tmp.rgb = vec3(0.);
|
||||
base = tmp;
|
||||
// clamp borders
|
||||
vec2 sz = vec2(2048.,1024.);
|
||||
vec2 px = uv*sz;
|
||||
if ( (px.x <= 1) || (px.x >= (sz.x-1)) || (px.y <= 1) || (px.y >= (sz.y-1)) )
|
||||
base = vec4(0.);
|
||||
// ding, logo's done
|
||||
mat.Base = base;
|
||||
mat.Normal = ApplyNormalMap(vTexCoord.st);
|
||||
}
|