1
0
Fork 0
I wanted to make a MUD where everyone is Astrid. Not a great idea for multiplayer, so I transformed that into a single player. Still not a great idea.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

123 lines
3.5 KiB

salet.game_id = "being-astrid-is-hard-enough-but-try-living-as-one"
salet.game_version = "1.0"
client = deepstream('localhost:6020').login()
$.holdReady( true )
$.getJSON('game/translations/'+i18n.lang+'.json', (data) ->
i18n.push(i18n.lang, data)
$.holdReady( false )
)
$(document).ready(() ->
window.addEventListener('popstate', (event) ->
salet.goBack()
)
$("#night").on("click", () ->
if (window.night)
styles = {
"-webkit-filter": ""
"filter": ""
"background-color": ""
}
$("body").css(styles)
$("#night").removeClass("active")
window.night = false
else
styles = {
"-webkit-filter": "invert(1)hue-rotate(180deg)"
"filter": "invert(1)hue-rotate(180deg)"
"background-color": "#000"
}
$("body").css(styles)
$("#night").addClass("active")
window.night = true
)
salet.beginGame()
)
salet.initGame = () ->
names = "names".l()
salet.character.name = names[salet.rnd.randomInt(names.length)]
salet.character.id = salet.rnd.randn()
button.color = salet.rnd.randomInt(button.colors.length)
###
Element helpers. There is no real need to build monsters like a().id("hello")
because you won't use them as is. It does not make sense in context, the
author has Markdown and all utilities to *forget* about the markup.
###
way_to = (content, ref) ->
return "<a href='#{ref}' class='way'>#{content}</a>"
textlink = (content, ref) ->
return "<a href='./_writer_#{ref}' class='once'>#{content}</a>"
actlink = (content, ref) ->
return "<a href='./#{ref}' class='once'>#{content}</a>"
# The first room of the game.
# For accessibility reasons the text is provided in HTML, not here.
room "start",
dsc: () -> "intro".l()
choices: "#start"
button = unit "button",
colors: ["red", "blue", "green", "yellow", "orange", "violet"]
color: 0
dsc: () -> "<center><b>{{"+("color_"+@colors[@color]).l()+"}}</b></center>"
act: () ->
@color = @color + 1
if @color >= @colors.length
@color = 0
salet.rooms["entry"].canChoose = true
salet.view.clearContent()
salet.here().entering(salet.currentRoom)
return ""
room "instance",
dsc: () -> "instance".l()
tags: ["start"]
choices: "#instance"
optionText: () -> "begin_game".l()
exit: () ->
client.record.listen('presence.*', (match, isSubscribed, response) =>
if (isSubscribed)
response.accept()
else
# stop publishing data, client disconnected
client.record.getRecord(match).discard()
)
salet.rooms["instance"].take(button)
croom = (name, options) ->
options.enter = () ->
if (salet.interactive)
status = client.record.getRecord('presence.'+@room)
status.set('presence.'+@room+'.'+salet.character.id, salet.character.name)
players = status.get()
if players.length > 1
salet.view.write("room_present".l())
names = []
for player in players
if player == 'presence.'+@room+'.'+salet.character.id
continue
i = client.record.getRecord(player)
names.push(i)
salet.view.write(names.join(', '))
options.exit = () ->
if (salet.interactive)
status = client.record.getRecord('presence')
status.delete('presence.'+@name+'.'+salet.character.id)
options.dsc = () ->
"### #{@title()}\n" + @desc()
return room(name,options)
croom "entry",
canChoose: false
tags: ["instance"]
optionText: () -> "entry_option".l()
title: () -> "entry_title".l()
ways: ["corridor"]
desc: () -> "entry_dsc".l()