mirror of
https://github.com/Oreolek/shooter.git
synced 2024-07-01 05:55:00 +03:00
166 lines
6.1 KiB
CoffeeScript
166 lines
6.1 KiB
CoffeeScript
# copyright (c) Alexander Yakovlev 2015.
|
||
# Distributed under the MIT license. See LICENSE for information.
|
||
|
||
situation = require('raconteur')
|
||
undum = require('undum-commonjs')
|
||
$ = require('jquery')
|
||
oneOf = require('raconteur/lib/oneOf.js')
|
||
elements = require('raconteur/lib/elements.js')
|
||
qualities = require('raconteur/lib/qualities.js')
|
||
colour = require("color")
|
||
md = require('markdown-it')
|
||
markdown = new md({
|
||
typographer: true,
|
||
html: true
|
||
})
|
||
|
||
a = elements.a
|
||
span = elements.span
|
||
img = elements.img
|
||
|
||
undum.game.id = "7a1aba32-f0fd-4e3b-ba5a-59e3fa9e6012"
|
||
undum.game.version = "0.1"
|
||
|
||
way_to = (content, ref) -> a(content).class('way').ref(ref)
|
||
textlink = (content, ref) -> a(content).once().writer(ref)
|
||
is_visited = (situation) -> undum.game.situations[situation].visited == 1
|
||
writemd = (system, text) ->
|
||
if typeof text is Function
|
||
text = text()
|
||
system.write(markdown.render(text))
|
||
|
||
link_colour = "#B68000"
|
||
|
||
spend_bullet = (character, system) ->
|
||
bullets = character.sandbox.clips[character.sandbox.current_clip]
|
||
if bullets >= 1
|
||
character.sandbox.clips[character.sandbox.current_clip]--
|
||
system.setQuality("bullets", bullets - 1)
|
||
|
||
spend_clip = (character, system) ->
|
||
clips = character.sandbox.clips.length
|
||
bullets = character.sandbox.clips[character.sandbox.current_clip]
|
||
if clips == 0
|
||
return
|
||
if bullets == 0
|
||
character.sandbox.clips.splice(character.sandbox.current_clip, 1)
|
||
system.setQuality("bullets", character.sandbox.clips[character.sandbox.current_clip])
|
||
system.setQuality("clips", clips - 1)
|
||
writemd(system, "Я выбрасываю пустой картридж.")
|
||
else
|
||
if character.sandbox.current_clip < clips - 1
|
||
character.sandbox.current_clip++
|
||
else
|
||
character.sandbox.current_clip == 0
|
||
system.setQuality("bullets", character.sandbox.clips[character.sandbox.current_clip])
|
||
|
||
situation 'start',
|
||
content: """
|
||
-- Проклятье, они продолжают идти!
|
||
|
||
Узкий коридор, я и непрекращающаяся очередь сверкающих белоснежной кожей андроидов.
|
||
Я уверен, что я представлял этот Новый Год совершенно не так.
|
||
""",
|
||
choices: ["#shoot"],
|
||
|
||
situation "hit",
|
||
content: (character, system, from) ->
|
||
response = oneOf(
|
||
"Голова андроида взрывается снопом сверкающих искр.",
|
||
"Андроид пытается увернуться, но попадает точнёхонько под пулю. Он падает, разливая масло на пол."
|
||
).randomly(system)
|
||
return response()
|
||
choices: ["#shoot"]
|
||
before: (character, system, from) ->
|
||
system.setQuality("enemies", character.qualities.enemies - 1)
|
||
character.sandbox.nicked = 0
|
||
choices: ["#shoot"]
|
||
|
||
situation "nicked",
|
||
content: (character, system, from) ->
|
||
if character.sandbox.nicked == 1
|
||
system.setQuality("enemies", character.qualities.enemies - 1)
|
||
character.sandbox.nicked = 0
|
||
response = oneOf(
|
||
"Я добиваю андроида выстрелом в сердце.",
|
||
"Я добиваю андроида точным выстрелом",
|
||
"Пуля пробивает голову андроида, и он наконец падает на пол без движения.",
|
||
).randomly(system)
|
||
return response()
|
||
else
|
||
character.sandbox.nicked = 1
|
||
response = oneOf(
|
||
"Я отстреливаю ногу врага. Он падает, но продолжает медленно царапать путь ко мне руками."
|
||
"Я простреливаю руку андроида. Он пошатывается, но продолжает идти."
|
||
).randomly(system)
|
||
return response()
|
||
choices: ["#shoot"]
|
||
|
||
situation "miss",
|
||
content: (character, system, from) ->
|
||
response = oneOf(
|
||
"Пуля пролетает над левым плечом андроида.",
|
||
"Андроид вовремя уворачивается от выстрела. Ничего, в следующий раз я не промахнусь."
|
||
).randomly(system)
|
||
return response()
|
||
choices: ["#shoot"]
|
||
|
||
situation "shoot",
|
||
tags: ["shoot"],
|
||
optionText: (character, system, from) ->
|
||
response = oneOf(
|
||
"Выстрел",
|
||
"СТРЕЛЯТЬ!",
|
||
"УБИТЬ ИХ ИЗ ПИСТОЛЕТА",
|
||
"НЕНАВИЖУ АНДРОИДОВ"
|
||
).stopping(system)
|
||
return response()
|
||
canChoose: (character, system) ->
|
||
return character.qualities.bullets > 0
|
||
before: (character, system, from) ->
|
||
spend_bullet(character, system)
|
||
system.clearContent()
|
||
after: (character, system, from) ->
|
||
# d20 roll
|
||
# 1-14 - hit, 15-18 - nicked, 19-20 = miss
|
||
roll = system.rnd.randomInt(1,20)
|
||
switch
|
||
when roll < 15 then system.doLink("hit")
|
||
when roll > 18 then system.doLink("miss")
|
||
else system.doLink("nicked")
|
||
|
||
situation "reload",
|
||
tags: ["shoot"],
|
||
choices: ["#shoot"],
|
||
optionText: "Перезарядить пистолет",
|
||
canView: (character, system) ->
|
||
return character.qualities.bullets < 6
|
||
before: (character, system) ->
|
||
system.clearContent()
|
||
after: (character, system) ->
|
||
spend_clip(character, system)
|
||
writemd(system, "Я вставляю другой картридж в пистолет. Надеюсь, в нём есть патроны.")
|
||
return true
|
||
|
||
# А теперь plot twist: у пистолета есть шанс осечки и промаха. Ты теряешь патрон. Всего патронов у тебя 36, а врагов 35.
|
||
|
||
situation "finale",
|
||
content: """
|
||
""",
|
||
|
||
qualities
|
||
head:
|
||
bullets: qualities.integer('Патронов в картридже'),
|
||
clips: qualities.integer('Картриджей с патронами'),
|
||
enemies: qualities.integer('Врагов впереди'),
|
||
|
||
undum.game.init = (character, system) ->
|
||
system.setQuality("bullets", 6)
|
||
system.setQuality("clips", 6)
|
||
system.setQuality("enemies", 35)
|
||
character.sandbox.clips = [6,6,6,6]
|
||
character.sandbox.current_clip = 0
|
||
character.sandbox.nicked = 0
|
||
|
||
window.onload = undum.begin
|