ll-hax-docs/sif/index.html
2023-10-22 19:33:18 -05:00

597 lines
No EOL
21 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://ll.hax.sif.moe/sif/">
<link rel="prev" href="../pugu/">
<link rel="next" href="../sifac/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.19">
<title>SIF - LL Hax Docs</title>
<link rel="stylesheet" href="../assets/stylesheets/main.eebd395e.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../style/better.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="pink" data-md-color-accent="deep-purple">
<script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#sif" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="LL Hax Docs" class="md-header__button md-logo" aria-label="LL Hax Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
LL Hax Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
SIF
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="pink" data-md-color-accent="deep-purple" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="pink" data-md-color-accent="deep-purple" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
</form>
<div class="md-header__option">
<div class="md-select">
<button class="md-header__button md-icon" aria-label="Select language">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m12.87 15.07-2.54-2.51.03-.03A17.52 17.52 0 0 0 14.07 6H17V4h-7V2H8v2H1v2h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04M18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12m-2.62 7 1.62-4.33L19.12 17h-3.24Z"/></svg>
</button>
<div class="md-select__inner">
<ul class="md-select__list">
<li class="md-select__item">
<a href="/en/" hreflang="en" class="md-select__link">
English
</a>
</li>
<li class="md-select__item">
<a href="/ja/" hreflang="ja" class="md-select__link">
日本語
</a>
</li>
<li class="md-select__item">
<a href="/zh_CN/" hreflang="zh_CN" class="md-select__link">
中国人
</a>
</li>
</ul>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="LL Hax Docs" class="md-nav__button md-logo" aria-label="LL Hax Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
LL Hax Docs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item">
<a href="../pugu/" class="md-nav__link">
Puchiguru
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
SIF
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
SIF
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#sif" class="md-nav__link">
SIF
</a>
</li>
<li class="md-nav__item">
<a href="#private_servers" class="md-nav__link">
Private Servers
</a>
</li>
<li class="md-nav__item">
<a href="#self_hostable_servers" class="md-nav__link">
Self Hostable Servers
</a>
<nav class="md-nav" aria-label="Self Hostable Servers">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#setup_for_android" class="md-nav__link">
Setup for Android
</a>
</li>
<li class="md-nav__item">
<a href="#self-host_server" class="md-nav__link">
Self-Host Server
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../sifac/" class="md-nav__link">
SIFAC
</a>
</li>
<li class="md-nav__item">
<a href="../sifas/" class="md-nav__link">
SIFAS
</a>
</li>
<li class="md-nav__item">
<a href="../sif2/" class="md-nav__link">
SIF2
</a>
</li>
<li class="md-nav__item">
<a href="../about/" class="md-nav__link">
About
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#sif" class="md-nav__link">
SIF
</a>
</li>
<li class="md-nav__item">
<a href="#private_servers" class="md-nav__link">
Private Servers
</a>
</li>
<li class="md-nav__item">
<a href="#self_hostable_servers" class="md-nav__link">
Self Hostable Servers
</a>
<nav class="md-nav" aria-label="Self Hostable Servers">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#setup_for_android" class="md-nav__link">
Setup for Android
</a>
</li>
<li class="md-nav__item">
<a href="#self-host_server" class="md-nav__link">
Self-Host Server
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>SIF</h1>
<h2 id="sif">SIF<a class="headerlink" href="#sif" title="Permanent link">&para;</a></h2>
<p>(the following was copied from the fandom wiki)
Love Live! School idol festival (ラブライブ!スクールアイドルフェスティバル Rabu raibu! Sukūru Aidoru Fesutibaru, LLSIF) was a rhythm game released for iOS and Android, based on the Love Live! franchise. It was published by Bushiroad and developed by KLab Inc. and was released on April 16, 2013 for iOS and June 6, 2013 for Android devices.</p>
<p>An English version was released on May 12, 2014 under the title "School Idol Festival" at version 1.6. A Taiwanese version was released on May 22, 2014 under Mobimon Inc. at version 1.2. A Chinese version was released on June 12, 2014 under MariyGames at version 1.0. A Korean version was released on July 1, 2014 under NHN Entertainment Corp. at version 1.1. The Korean version was shut down and merged with the Global version on August 10, 2016. The Traditional Chinese version was shut down and merged with the Global version as of May 17, 2017. The Japanese Version was merged with the Global Version on June 10, 2021 and the Korean version &amp; Traditional Chinese options was removed.</p>
<p>An arcade version was announced to be in production on November 27, 2015 and was made available for play on December 6, 2016. A new game titled Love Live! School Idol Festival ALL STARS was announced to be in production on September 21, 2017, and was released on September 26, 2019. Both games will continue to run concurrently alongside each other.</p>
<p>A successor to the game Love Live! School idol festival 2 MIRACLE LIVE! was announced on September 25, 2022, also featuring Nijigasaki High School Idol Club and Liella!.</p>
<p>On January 31, 2023, it was announced that the game's service would be shut down on March 31, 2023. <a href="https://love-live.fandom.com/wiki/Love_Live!_School_idol_festival">^1</a></p>
<h2 id="private_servers">Private Servers<a class="headerlink" href="#private_servers" title="Permanent link">&para;</a></h2>
<h2 id="self_hostable_servers">Self Hostable Servers<a class="headerlink" href="#self_hostable_servers" title="Permanent link">&para;</a></h2>
<p>Special thanks to AuahDark and hentaku for being the gods that carried us this far. If it wasn't for these two (and many others in the community), we would not have the game to play anymore!</p>
<p>Currently there are a few methods of playing SIF in a semi-online state, but you are the hoster of this server. There are however public CDN servers (hosting the game files like musics and story files). This is also self-hostable but there is no written guide for it at the moment.</p>
<h3 id="setup_for_android">Setup for Android<a class="headerlink" href="#setup_for_android" title="Permanent link">&para;</a></h3>
<p>Retrieve the APK file. There are many locations for this, but the main requirement is that it's patched to work with the server we'll be setting up. Try getting it at the locations below:</p>
<ul>
<li><a href="https://cdn.sif.moe/lovelive-community.apk">https://cdn.sif.moe/lovelive-community.apk</a></li>
<li><a href="https://pixeldrain.com/u/8vx6azHr">https://pixeldrain.com/u/8vx6azHr</a></li>
</ul>
<p>The differences of the ones above are JP and Global. Global has the following done to it:</p>
<ul>
<li>Automatic in-game language selection between English and Japanese based on system language or Android 13 per-app language setting.</li>
<li>Runs natively in Android emulator. All binaries supported by Android, including x86-64, is available.</li>
<li>Activates debug mode which show little bit of more information in-game.</li>
<li>Backtrace, AppsFlyer, and Google Play is neutralized.</li>
<li>Backtrace error is printed to logcat.</li>
<li>Uses RSA private key from tungnotpunk/LLSIF@Home which should be compatible with LLSIF@Home and NPPS4.</li>
<li>AppAssets.zip is patched to load from localhost:51376. This means it's compatible with LLSIF@Home and NPPS4.</li>
</ul>
<p>Note: It does NOT contain patch to neutralize X-Message-Sign check. If you can't get XMS verification working, you need to patch it yourself. Well, you should make your private server generates correct XMS though.
Note2: It's recommended to launch the game in English for the first time. Otherwise, when you launch the game in Japanese for the first time, switching to English will erase all your game data (excluding your account). This logic is in the Lua script of the game. Help on neutralizing this behavior is welcome.</p>
<p>If you need to modify more aspects of the APK (e.g. changing the private key or removing XMS check), consider pulling out the AppAssets.zip, modify as needed, and build your own APK using https://git.gladstonesystems.com/love-live-community/SIFAndroidWrapper Android project as it has automatic RSA patching capabilities.</p>
<p>How to generate X-Message-Sign:
NPPS4: https://github.com/DarkEnergyProcessor/NPPS4/blob/b24b4e2a71be3c268c069a49bd3fae2bb25d7feb/npps4/util.py#L37-L42
LLSIF@Home: https://codeberg.org/dic1911/LLSIF.local/src/commit/e7e780258dca86c2f1a77577897fad23298fe9c7/handler/util.js#L18-L34</p>
<p>After the APK is retrieved and installed, then you should install the private server.</p>
<h3 id="self-host_server">Self-Host Server<a class="headerlink" href="#self-host_server" title="Permanent link">&para;</a></h3>
<ol>
<li>Install Termux (I recommend to download from <a href="https://f-droid.org/en/packages/com.termux/">F-Droid</a>, <a href="https://f-droid.org/repo/com.termux_118.apk">direct link for latest release atm</a>) and open it</li>
<li>Run this command(s) inside of <code>Termux</code>:
<code>curl http://ll.sif.moe/android | bash</code>
<strong><em>OR</em></strong> (if the command above fails do the commands below)
<code>wget http://ll.sif.moe/android</code>
<code>bash android</code>
(curl is broken currently, this will be one command if curl is fixed)</li>
<li>After it is done and it shows you the link to the discord/matrix server, you can run <code>runserver</code> to start the private server.</li>
<li>After this is done, you should be able to launch the game and it should just work. Message in the discord or matrix if help is needed.</li>
</ol>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": [], "search": "../assets/javascripts/workers/search.74e28a9f.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../assets/javascripts/bundle.220ee61c.min.js"></script>
</body>
</html>