END SCREEN DONE

This commit is contained in:
Nicky Case 2019-04-29 15:19:44 -04:00
parent f3c47bf5b0
commit b058d5c9a7
12 changed files with 290 additions and 74 deletions

View File

@ -16,7 +16,7 @@
<div id="game_choices"></div>
<!-- Bottom Corner Tabs -->
<div id="gear" style="display:none">
<div id="gear" style="display:none" onclick="publish('show_options')">
<div class="icon"></div>
</div>
<div id="about" style="display:none">
@ -31,27 +31,70 @@
</div>
</div>
<!-- LOADING -->
<div id="loading">
<div id="loading_progress">loading...</div>
<div id="loading_done" style="display:none">play!</div>
</div>
<!-- ABOUT / END DEMO -->
<div id="end_demo" style="display:none">
<div id="end_demo">
<div id="end_demo_tbc"></div>
<div id="end_demo_words">
Augh games take so long to make!
This one will be done summer 2019, and released for <i>free</i>.
Get notified via my (once-a-month) newsletter!
<div>
<form id="the_newsletter" method="POST" accept-charset="utf-8" target="_blank">
<input type="text" name="name" id="name" style="display:none"/>
<input type="email" name="email" id="email" placeholder="your@email.com" required/>
<div id="email_info">
<input type="checkbox" name="gdpr" id="gdpr"/>
<div id="consent">
I consent to 1 ✉️ a month, that's it
</div>
<input type="submit" name="submit" id="submit" disabled/>
</div>
<!-- Hidden -->
<input type="hidden" name="list" value="57rMxgfbvr08aemz763COHwg"/>
<input type="hidden" name="subform" value="yes"/>
<!-- Hey bots, fill this one up. -->
<div style="display:none;">
<label for="hp">HP</label><br/>
<input type="text" name="hp" id="hp"/>
</div>
</form>
</div>
You can also help me make more
free games by throwing cash at me:
<div id="patreon"></div>
Or even a share on one of those
anxiety-producing apps would help:
<div>
Help me keep making free games?
</div>
<a href="https://www.patreon.com/ncase" target="_blank" class="no_deco">
<div id="patreon"></div>
</a>
<div>
A share on an anxiety-app helps too!
</div>
<!-- TODO: Better share text -->
<div id="share">
<div id="share_fb"></div>
<div id="share_tw"></div>
<div id="share_em"></div>
<a href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fncase.me%2Fanxiety-demo&quote=Adventures%20with%20Anxiety%20(DEMO)" target="_blank" class="no_deco">
<div id="share_fb"></div>
</a>
<a href="https://twitter.com/intent/tweet?source=https%3A%2F%2Fncase.me%2Fanxiety-demo&text=Adventures%20with%20Anxiety%20(DEMO):%20https%3A%2F%2Fncase.me%2Fanxiety-demo" target="_blank" class="no_deco">
<div id="share_tw"></div>
</a>
<a href="mailto:?subject=Adventures%20with%20Anxiety%20(DEMO)&body=:%20https%3A%2F%2Fncase.me%2Fanxiety-demo" target="_blank" class="no_deco">
<div id="share_em"></div>
</a>
</div>
Thank you so much for playing! &lt;3
<div style="clear:both"></div>
Above all, thank you for playing! &lt;3
<br>
<a href="https://ncase.me/" target="_blank">
my other games
@ -60,7 +103,9 @@
<a href="https://twitter.com/ncasenmare" target="_blank">
my twitter
</a>
<div></div>
<div id="replay"></div>
</div>
</div>
@ -68,15 +113,13 @@
<div id="options">
<div id="text_speed_preview"></div>
<input id="text_speed_slider" type="range" min=0 value=2 max=4 step=1/>
<span id="volume_options" style="display:none">
<div>Volume:</div>
<input id="volume_slider" type="range" min=0 max=1 value=1 step="0.01"/>
</span>
<div id="options_ok">ok 👌</div>
</div>
<!-- LOADING -->
<div id="loading" onclick="publish('START_GAME')">
<div id="loading_progress">loading...</div>
<div id="loading_done" style="display:none">play!</div>
</div>
</div>
</body>
@ -96,6 +139,7 @@
<script src="scripts/game/Character.js"></script>
<script src="scripts/game/Sounds.js"></script>
<script src="scripts/game/Options.js"></script>
<script src="scripts/game/About.js"></script>
<script src="scripts/intro/Intro_SceneSetup.js"></script>
<script src="scripts/intro/Intro_BG.js"></script>

View File

@ -18,4 +18,4 @@ n: #bad# *BEING A BAD PERSON:* {{_.attack_bad}}
(...2000)
`publish("END_OF_DEMO")`
`publish("END_OF_DEMO")`

View File

@ -26,11 +26,11 @@ n: QUICK, WARN THEM!
`Game.OVERRIDE_TEXT_SPEED = 1.25;`
n4: (LET _YOUR_ WOLF COME OUT TO PLAY! PICK WHAT _YOUR_ ANXIETY WOULD BE MOST LIKELY TO SAY)
n4: (LET _YOUR_ WOLF COME OUT TO PLAY. PICK WHAT _YOUR_ ANXIETY WOULD BE MOST LIKELY TO SAY TO YOU)
[You're eating alone for lunch! Again!](#act1a_alone)
[You're not productive while eating!](#act1a_study)
[You're not productive while eating!](#act1a_productive)
[That white bread's bad for you!](#act1a_bread)
@ -75,20 +75,20 @@ n: YOU USED *FEAR OF BEING UNLOVED*
(#act1b)
# act1a_study
# act1a_productive
b: You should multi-task and study during meals!
b: Whip out your laptop and do some work right now!
`hong({eyes:"0_annoyed"})`
h: Um, I'd rather not get crumbs on my textboo--
h: Um, I'd rather not get crumbs in my keyboa--
```
bb({mouth:"normal", eyes:"fear"});
Game.OVERRIDE_TEXT_SPEED = 1.5;
```
b: If you don't study you'll be expelled from college and your parents will say
b: If you're not productive you'll become a penniless parasite and your parents will say
`bb({mouth:"small", eyes:"narrow"})`
@ -196,7 +196,7 @@ hong({body:"phone1", mouth:"neutral", eyes:"neutral"})
n: PROTECT YOUR HUMAN
n: FROM THE WORLD. FROM OTHER PEOPLE. FROM THEMSELVES.
n: FROM THE WORLD. FROM OTHER PEOPLE. FROM THEMSELF.
n: GOOD LUCK
@ -272,7 +272,7 @@ b: So yeah you should go to that party.
{{/if}}
{{if _.seppuku}}
b: Just bring a textbook to study while you're there.
b: Just bring your laptop so you can do some work.
{{/if}}
{{if _.whitebread}}
@ -321,7 +321,7 @@ attack("10p", "harm");
(...2500)
{{if _.seppuku}}
b: Besides, can't party, you need to study so your parents don't commit seppuku.
b: Besides, can't party, you need to do work so your parents don't commit seppuku.
{{/if}}
`hong({mouth:"anger", eyes:"anger"});`
@ -345,7 +345,7 @@ b: All you ever do is cry in a corner and worry about how loneliness is as deadl
{{/if}}
{{if _.seppuku}}
b: All you ever do at parties is worry about how you should be studying instead.
b: All you ever do at parties is worry about how you should be doing work instead.
{{/if}}
{{if _.whitebread}}
@ -836,13 +836,7 @@ bb({body:"fear"});
Game.OVERRIDE_TEXT_SPEED = 1.5;
```
b: Do you want your freak skeleton to end up in a medical textbook?!
`bb({eyes:"narrow"});`
{{if _.seppuku}}
b: Though apparently you don't *read* textbooks anyway, you terrible slacker.
{{/if}}
b: Do you want your freak skeleton to end up in a cheap tourist trap museum?!
```
hong({mouth:"shock", eyes:"shock"});
@ -1090,7 +1084,7 @@ b: They'll trap you in a well and force-feed you white bread to fatten you up so
{{/if}}
{{if _.seppuku}}
b: They'll bludgeon you with a textbook and slice your belly open and say "this is what you get for not studying, SEPUKKU'D"
b: They'll bludgeon you with a pomodoro timer and slice your belly open and say "this is what slackers get, SEPUKKU'D"
{{/if}}
{{if !_.whitebread && !_.seppuku}}
@ -1133,7 +1127,7 @@ h: i'm so sick of this game.
h:
{{if _.fifteencigs}}"loneliness will kill you"... {{/if}}
{{if _.seppuku}}"study or your parents will hate you"... {{/if}}
{{if _.seppuku}}"be productive or you'll be dishonored"... {{/if}}
{{if _.whitebread}}"don't eat that, it'll kill you"... {{/if}}
{{if _.subtweet}}"they're talking behind your back"... {{/if}}
{{if _.badnews}}"the world is burning"... {{/if}}

View File

@ -12,7 +12,7 @@
`clearText()`
n3: Note: this is less of a "game", more of an interactive story. Hope you like reading, sucka!
n3: Welcome! This is less of a "game", more of an interactive story. Hope you like reading, sucka
n3: So before we start, please choose your reading speed:
@ -29,7 +29,7 @@ n3: About as relaxing as a game about anxiety's gonna get.
{{/if}}
{{if Game.TEXT_SPEED==60}}
n3: Great! Defaults are everyone's favorite non-choice choice.
n3: Great! Default, the best non-choice choice.
{{/if}}
{{if Game.TEXT_SPEED==40}}

14
scripts/game/About.js Normal file
View File

@ -0,0 +1,14 @@
(function(){
var gdpr = $("#gdpr");
var submit = $("#submit");
gdpr.oninput = function(){
var isChecked = gdpr.checked;
submit.disabled = !isChecked;
submit.value = isChecked ? "Subscribe! →" : "← plz consent";
};
gdpr.oninput();
$("#the_newsletter").setAttribute("action", "https://sendy.ncase.me/subscribe");
})();

View File

@ -113,13 +113,17 @@ Game.update = function(){
Game.paused = false;
Game.pausedDOM = $("#paused");
Game.pause = function(){
Game.paused = true;
Game.pausedDOM.style.display = "block";
Howler.mute(true);
$("#paused").setAttribute("modal", Options.showing ? "yes" : "no" );
};
window.addEventListener("blur", Game.pause);
Game.onUnpause = function(){
if(Game.paused){
if(Game.paused && !Options.showing){
Game.paused = false;
Game.pausedDOM.style.display = "none";
Howler.mute(false);
@ -145,6 +149,8 @@ Game.clearAllTimeouts = function(){
};
Game.canvas.addEventListener("click", Game.clearAllTimeouts);
Game.canvas.addEventListener("touchstart", Game.clearAllTimeouts);
Game.choicesDOM.addEventListener("click", Game.clearAllTimeouts);
Game.choicesDOM.addEventListener("touchstart", Game.clearAllTimeouts);
Game.goto = function(sectionID){
@ -502,7 +508,7 @@ Game.executeText = function(line){
var nextLineDelay = Game.TEXT_SPEED*7; // don't override this
if(dialogue.slice(-1)=="-") nextLineDelay=0; // sudden interrupt!
if(Game.TEXT_SPEED<10){ // IF IT'S CLICK-TO-ADVANCE, INFINITE TIMEOUT.
nextLineDelay = 1000*1000; // one thousand seconds
nextLineDelay = 1000*10000; // ten thousand seconds
}
Game.setTimeout(function(){
Game.WHO_IS_SPEAKING = null; // DONE WITH IT.
@ -545,7 +551,7 @@ Game.executeChoice = function(line){
var div = document.createElement("div");
div.innerHTML = choiceText;
div.onclick = function(){
div.onclick = function(event){
// Any pre-choice code?
if(preChoiceCodeIfAny) Game.executeCode(preChoiceCodeIfAny);
@ -562,6 +568,9 @@ Game.executeChoice = function(line){
// Goto that choice, now!
Game.goto(choiceID);
// STOP THE PROP
event.stopPropagation();
};
div.onmouseover = function(){
sfx("ui_hover");
@ -620,7 +629,7 @@ Game.executeWait = function(line){
var waitTime = parseInt(line.match(/^\(\.\.\.(\d+)\)/)[1].trim());
// Unless it's click to advance, then IGNORE ALL WAITS
if(Game.TEXT_SPEED<10){
if(Game.TEXT_SPEED<10 && waitTime<=1000){ // hack: unless the wait is long.
waitTime = 0; // TODO: Tag anim-waits, do not ignore.
}
@ -669,12 +678,12 @@ Game.parseLine = function(line){
// Get the IFs, if any
var lookForIfs = true;
var regex = /\{\{if[^\/]*\/if\}\}/ig;
while(lookForIfs){
lookForIfs = false;
// Look for an IF!
var regex = /\{\{if[^\/]*\/if\}\}/ig; // the reason it's inside here is to reset .exec
var regexResult = regex.exec(line);
if(regexResult){
@ -710,12 +719,12 @@ Game.parseLine = function(line){
// Evaluate {{expressions}}, if any
var lookForExpressions = true;
var regex = /\{\{[^\}]*\}\}/ig;
while(lookForExpressions){
lookForExpressions = false;
// Look for an IF!
var regex = /\{\{[^\}]*\}\}/ig; // the reason it's inside here is to reset .exec
var regexResult = regex.exec(line);
if(regexResult){

View File

@ -5,13 +5,14 @@ window.Options = {};
var optionsDOM = $("#options");
var text_speed_slider = $("#text_speed_slider");
var text_speed_preview = $("#text_speed_preview");
var volume_slider = $("#volume_slider");
var SPEED_TEXTS = [
"Show text slowlyyyyy",
"Show text at a relaxed speed",
"Show text at the default speed",
"Show text at a brisk speed",
"INSTANT! With click-to-advance"
"All-at-once, click to advance"
];
var SPEEDS = [
100,
@ -24,6 +25,10 @@ window.Options = {};
updateText();
};
volume_slider.oninput = function(){
Howler.volume(parseFloat(volume_slider.value));
};
///////////////////////////////////
// For previewing the text speed //
///////////////////////////////////
@ -97,7 +102,9 @@ window.Options = {};
};
updateText();
/////////////////////////////
///////////////////////////////////
// Showing/hiding options /////////
///////////////////////////////////
subscribe("show_options_bottom", function(){
@ -111,8 +118,14 @@ window.Options = {};
});
var ALREADY_DID_INTRO = false;
$("#options_ok").onclick = function(){
publish("cut_options_bottom");
if(!ALREADY_DID_INTRO){
publish("cut_options_bottom");
ALREADY_DID_INTRO = true;
}else{
publish("hide_options");
}
};
subscribe("cut_options_bottom", function(){
@ -131,4 +144,18 @@ window.Options = {};
});
subscribe("show_options", function(){
$("#volume_options").style.display = "block";
optionsDOM.style.top = "200px";
Options.showing = true;
Game.pause();
Howler.mute(false); // hack
});
subscribe("hide_options", function(){
optionsDOM.style.top = "";
Options.showing = false;
Game.onUnpause();
});
})();

View File

@ -50,6 +50,7 @@ window.music = function(song, options){
}else{
var song = Library.sounds["music_"+song];
song.stop(); // just in case it was playing earlier
song.loop(true);
if(options.fade==0){

View File

@ -123,10 +123,10 @@ function BG_Intro(){
frameTicker += 1/60;
if(GAME_TRANSITION==0 || GAME_TRANSITION==1 || GAME_TRANSITION==2){
if(frameTicker>590/30){
if(GAME_TRANSITION==0 || GAME_TRANSITION==1){
if(GAME_TRANSITION==0){
frameTicker = 381/30; // LOOP to NOM.
}
if(GAME_TRANSITION==2){
if(GAME_TRANSITION==1 || GAME_TRANSITION==2){ // actually ew nah stop it
frameTicker = 590/30; // STOP.
}
}

View File

@ -8,22 +8,11 @@ Loader.load().then(function(){
$("#loading_progress").style.display = "none";
$("#loading_done").style.display = "block";
$("#loading").onclick = function(){
publish('START_GAME');
};
Game.init();
/*Game.start();
Game.pause(); // just for sounds
// Set up...
/*SceneSetup.act1();
publish("hp_show");
hong({body:"phone1", mouth:"neutral", eyes:"neutral"});
_.whitebread = true;*/
// GO!
//music('battle', 0.5);
//Game.goto("act1f");
//Game.goto("intro");
});
@ -32,11 +21,16 @@ subscribe("START_GAME", function(){
$("#loading").style.display = "none";
Game.start();
SceneSetup.act1();
/*SceneSetup.act1();
music('battle', {volume:0.5});
hong({body:"phone1"});
Game.goto("act1h");
_.seppuku = true;
_.hookuphole = true;
_.catmilk = true;
Game.goto("act1g");*/
//Game.goto("act1");
Game.goto("intro");
});

View File

@ -13,7 +13,7 @@ MAIN GAME
******************************************************************************************************/
#game_words, #game_choices, #paused{
#game_words, #game_choices, #paused, #options, #loading, #gear, #about{
-webkit-user-select: none; /* Safari 3.1+ */
-moz-user-select: none; /* Firefox 2+ */
-ms-user-select: none; /* IE 10+ */
@ -45,6 +45,10 @@ MAIN GAME
overflow: hidden;
}
#game_words, #game_hp{
pointer-events: none;
}
/******************************************************************************************************
@ -127,6 +131,12 @@ PAUSED & LOADING
width: 220px;
margin: 15px auto;
}
#paused[modal=yes]{
background: rgba(70,70,70,0.9);
}
#paused[modal=yes] > div{
display: none;
}
#loading{
display:block;
@ -177,11 +187,118 @@ ABOUT / END DEMO
#end_demo_words a:hover{
color: #ff8080;
}
#end_demo a.no_deco{
text-decoration: none;
}
#the_newsletter #email{
width: 300px;
font-size: 20px;
border: none;
padding: 5px;
font-weight: 300;
margin-top: 10px;
border-radius: 5px;
}
#the_newsletter #email_info{
position: relative;
width: 310px;
height: 60px;
}
#the_newsletter #gdpr{
position: absolute;
transform: scale(2);
top: 11px;
left: 3px;
}
#the_newsletter #consent{
font-size: 13px;
position: absolute;
left: 31px;
top: 8px;
width: 110px;
line-height: 1em;
text-align: left;
}
#the_newsletter #submit{
background: #ff4040;
position: absolute;
top: 6px;
left: 150px;
width: 160px;
height: 30px;
font-size: 20px;
font-weight: 300;
border-radius: 30px;
border: none;
color: #ffffff;
cursor: pointer;
}
#the_newsletter #submit:hover{
background: #ff7070;
}
#the_newsletter #submit[disabled]{
background: #555;
color: #222;
cursor: default;
}
#patreon{
width:200px; height:60px;
width: 160px;
height: 48px;
background: url(../sprites/end_demo/patreon.png);
background-size: 100%;
margin: 5px auto 15px auto;
margin: 5px auto 10px auto;
cursor: pointer;
position: relative;
}
#patreon:hover{
top:-2px;
}
#share{
overflow: hidden;
text-align: center;
padding: 2px 0;
margin-bottom: 3px;
}
#share div{
display: inline-block;
overflow: hidden;
width:40px; height:40px;
background: url(../sprites/end_demo/share.png);
background-size: 300%;
position: relative;
cursor: pointer;
}
#share div:hover{
top:-2px;
}
#share #share_fb{
background-position: 0px;
}
#share #share_tw{
background-position: -40px;
}
#share #share_em{
background-position: -80px;
}
#replay{
width:100px;
height: 80px;
background: url(../sprites/end_demo/replay.png);
background-size: 300%;
position: absolute;
bottom: 0;
left: 130px;
cursor: pointer;
}
#replay:hover{
background-position: -100px;
}
#replay:active{
background-position: -200px;
}
@ -196,10 +313,12 @@ OPTIONS
top: 600px;
width: 300px;
background: #2e2e2e;
padding: 15px;
margin: 15px;
background: #2e2e2e;
color:#fff;
/* Spring OUT only */
-webkit-transition: top 500ms cubic-bezier(0.350, 0.005, 0.370, 1); /* older webkit */
-webkit-transition: top 500ms cubic-bezier(0.350, 0.005, 0.370, 1.390);
@ -215,7 +334,6 @@ OPTIONS
}
#text_speed_preview{
color:#fff;
height: 1.3em;
}
#options_ok{

15
test.html Normal file
View File

@ -0,0 +1,15 @@
<form action="https://sendy.ncase.me/subscribe" method="POST" accept-charset="utf-8" target="_blank">
<input type="text" name="name" id="name" style="display:none"/>
<input type="email" name="email" id="email" placeholder="your@email.com"/><br/><br/>
<input type="checkbox" name="gdpr" id="gdpr"/>
<span>
I consent to 1 ✉️ per ~2 months, that's it
</span>
<div style="display:none;">
<label for="hp">HP</label><br/>
<input type="text" name="hp" id="hp"/>
</div>
<input type="hidden" name="list" value="57rMxgfbvr08aemz763COHwg"/>
<input type="hidden" name="subform" value="yes"/>
<input type="submit" name="submit" id="submit"/>
</form>