Moves us to the changelog system used by /vg/, /tg/, and others.

Cleans up the HTLM folder, removing unused files.
Will also attempt include /tg/'s "You have unread changelog entries" notification on join.
This commit is contained in:
PsiOmega
2015-04-18 10:52:29 +02:00
parent fdd041830a
commit 3edfbf0040
26 changed files with 475 additions and 655 deletions

View File

@@ -259,8 +259,9 @@
getFiles(
'html/search.js',
'html/panels.css',
'html/painew.png',
'html/loading.gif',
'html/images/loading.gif',
'html/images/ntlogo.png',
'html/images/talisman.png',
'icons/pda_icons/pda_atmos.png',
'icons/pda_icons/pda_back.png',
'icons/pda_icons/pda_bell.png',
@@ -298,7 +299,5 @@
'icons/spideros_icons/sos_11.png',
'icons/spideros_icons/sos_12.png',
'icons/spideros_icons/sos_13.png',
'icons/spideros_icons/sos_14.png',
'html/images/ntlogo.png',
'html/images/talisman.png'
'icons/spideros_icons/sos_14.png'
)

View File

@@ -101,7 +101,6 @@
/mob/living/silicon/pai/Login()
..()
usr << browse_rsc('html/paigrid.png') // Go ahead and cache the interface resources as early as possible
// this function shows the information about being silenced as a pAI in the Status panel

View File

@@ -378,8 +378,6 @@
set name = "Changelog"
set category = "OOC"
getFiles(
'html/postcardsmall.jpg',
'html/somerights20.png',
'html/88x31.png',
'html/bug-minus.png',
'html/cross-circle.png',

Binary file not shown.

Before

Width:  |  Height:  |  Size: 697 B

Binary file not shown.

View File

@@ -1,53 +0,0 @@
<html>
<title>Shittiest Player Ever - PM</title>
<style type="text/css">
body
{
font-size: 10pt;
font-family: Verdana, sans-serif;
}
h1, h2, h3, h4, h5, h6
{
color: #00f;
font-family: Georgia, Arial, sans-serif;
}
#chatlog
{
border: 1px grey solid;
height: 280px;
width: 500px;
overflow-y: scroll;
word-wrap: break-word;
}
img {
border: 0px;
}
p.lic {
font-size: 6pt;
}
</style>
<body>
<div id="chatlog">
<!-- Print logged text here, different colors for your own key and other user's key -->
Badmin: Hey why the fuck are you killing that dude???<br><br>
Shittiest Player Ever: he tok ym baten n id and i ahd to use the lasre on his *ss<br><br>
Badmin: wow good fucking job, you are the best player ever!!!!!!<br><br>
Badmin: where the fuck did you learn english?<br><br>
Shittiest Player Ever: he tryed to k;ikll me<br><br>
Badmin: you are shit!!!!!
</div>
<script language="JavaScript">
var objDiv = document.getElementById("chatlog");
objDiv.scrollTop = objDiv.scrollHeight;
</script>
<br>
<form name="chatinput" action="byond://?src=/* ref src */" method="get">
<input type="hidden" name="src" value="/* ref src */">
<input type="text" name="message" maxlength="120" size="70">
<input type="submit" value="Send">
</form>
</body>
</html>

View File

@@ -1,36 +1,35 @@
.top{font-family:Tahoma,sans-serif;font-size:12px;}
h2{font-family:Tahoma,sans-serif;}
a img {border:none;}
.bgimages16 li {
padding:2px 10px 2px 30px;
background-position:6px center;
background-repeat:no-repeat;
border:1px solid #ddd;
border-left:4px solid #999;
margin-bottom:2px;
}
.bugfix {background-image:url(bug-minus.png)}
.wip {background-image:url(hard-hat-exclamation.png)}
.tweak {background-image:url(wrench-screwdriver.png)}
.soundadd {background-image:url(music-plus.png)}
.sounddel {background-image:url(music-minus.png)}
.rscdel {background-image:url(cross-circle.png)}
.rscadd {background-image:url(tick-circle.png)}
.imageadd {background-image:url(image-plus.png)}
.imagedel {background-image:url(image-minus.png)}
.spellcheck {background-image:url(spell-check.png)}
.experiment {background-image:url(burn-exclamation.png)}
.tgs {background-image:url(tg-notif.png)}
.sansserif {font-family:Tahoma,sans-serif;font-size:12px;}
.commit {margin-bottom:20px;font-size:100%;font-weight:normal;}
.changes {list-style:none;margin:5px 0;padding:0 0 0 25px;font-size:0.8em;}
.date {margin:10px 0;color:blue;border-bottom:2px solid #00f;width:60%;padding:2px 0;font-size:1em;font-weight:bold;}
.author {padding-left:10px;margin:0;font-weight:bold;font-size:0.9em;}
.drop {cursor:pointer;border:1px solid #999;display:inline;font-size:0.9em;padding:1px 20px 1px 5px;line-height:16px;}
.hidden {display:none;}
.indrop {margin:2px 0 0 0;clear:both;background:#fff;border:1px solid #ddd;padding:5px 10px;}
.indrop p {margin:0;font-size:0.8em;line-height:16px;margin:1px 0;}
.indrop img {margin-right:5px;vertical-align:middle;}
.closed {background:url(chevron-expand.png) right center no-repeat;}
.open {background:url(chevron.png) right center no-repeat;}
.top{font-family:Tahoma,sans-serif;font-size:12px;}
h2{font-family:Tahoma,sans-serif;}
a img {border:none;}
.bgimages16 li {
padding:2px 10px 2px 30px;
background-position:6px center;
background-repeat:no-repeat;
border:1px solid #ddd;
border-left:4px solid #999;
margin-bottom:2px;
}
.bugfix {background-image:url(bug-minus.png)}
.wip {background-image:url(hard-hat-exclamation.png)}
.tweak {background-image:url(wrench-screwdriver.png)}
.soundadd {background-image:url(music-plus.png)}
.sounddel {background-image:url(music-minus.png)}
.rscdel {background-image:url(cross-circle.png)}
.rscadd {background-image:url(tick-circle.png)}
.imageadd {background-image:url(image-plus.png)}
.imagedel {background-image:url(image-minus.png)}
.spellcheck {background-image:url(spell-check.png)}
.experiment {background-image:url(burn-exclamation.png)}
.sansserif {font-family:Tahoma,sans-serif;font-size:12px;}
.commit {margin-bottom:20px;font-size:100%;font-weight:normal;}
.changes {list-style:none;margin:5px 0;padding:0 0 0 25px;font-size:0.8em;}
.date {margin:10px 0;color:blue;border-bottom:2px solid #00f;width:60%;padding:2px 0;font-size:1em;font-weight:bold;}
.author {padding-left:10px;margin:0;font-weight:bold;font-size:0.9em;}
.drop {cursor:pointer;border:1px solid #999;display:inline;font-size:0.9em;padding:1px 20px 1px 5px;line-height:16px;}
.hidden {display:none;}
.indrop {margin:2px 0 0 0;clear:both;background:#fff;border:1px solid #ddd;padding:5px 10px;}
.indrop p {margin:0;font-size:0.8em;line-height:16px;margin:1px 0;}
.indrop img {margin-right:5px;vertical-align:middle;}
.closed {background:url(chevron-expand.png) right center no-repeat;}
.open {background:url(chevron.png) right center no-repeat;}
.lic {font-size:9px;}

View File

@@ -1,87 +1,87 @@
/*
function dropdowns() {
var divs = document.getElementsByTagName('div');
var headers = new Array();
var links = new Array();
for(var i=0;i<divs.length;i++){
if(divs[i].className=='drop') {
divs[i].className='drop closed';
headers.push(divs[i]);
}
if(divs[i].className=='indrop') {
divs[i].className='indrop hidden';
links.push(divs[i]);
}
}
for(var i=0;i<headers.length;i++){
if(typeof(links[i])!== 'undefined' && links[i]!=null) {
headers[i].onclick = (function(elem) {
return function() {
if(elem.className.search('visible')>=0) {
elem.className = elem.className.replace('visible','hidden');
this.className = this.className.replace('open','closed');
}
else {
elem.className = elem.className.replace('hidden','visible');
this.className = this.className.replace('closed','open');
}
return false;
}
})(links[i]);
}
}
}
*/
/*
function filterchanges(type){
var lists = document.getElementsByTagName('ul');
for(var i in lists){
if(lists[i].className && lists[i].className.search('changes')>=0) {
for(var j in lists[i].childNodes){
if(lists[i].childNodes[j].nodeType == 1){
if(!type){
lists[i].childNodes[j].style.display = 'block';
}
else if(lists[i].childNodes[j].className!=type) {
lists[i].childNodes[j].style.display = 'none';
}
else {
lists[i].childNodes[j].style.display = 'block';
}
}
}
}
}
}
*/
function dropdowns() {
var drops = $('div.drop');
var indrops = $('div.indrop');
if(drops.length!=indrops.length){
alert("Some coder fucked up with dropdowns");
}
drops.each(function(index){
$(this).toggleClass('closed');
$(indrops[index]).hide();
$(this).click(function(){
$(this).toggleClass('closed');
$(this).toggleClass('open');
$(indrops[index]).toggle();
});
});
}
function filterchanges(type){
$('ul.changes li').each(function(){
if(!type || $(this).hasClass(type)){
$(this).show();
}
else {
$(this).hide();
}
});
}
$(document).ready(function(){
dropdowns();
/*
function dropdowns() {
var divs = document.getElementsByTagName('div');
var headers = new Array();
var links = new Array();
for(var i=0;i<divs.length;i++){
if(divs[i].className=='drop') {
divs[i].className='drop closed';
headers.push(divs[i]);
}
if(divs[i].className=='indrop') {
divs[i].className='indrop hidden';
links.push(divs[i]);
}
}
for(var i=0;i<headers.length;i++){
if(typeof(links[i])!== 'undefined' && links[i]!=null) {
headers[i].onclick = (function(elem) {
return function() {
if(elem.className.search('visible')>=0) {
elem.className = elem.className.replace('visible','hidden');
this.className = this.className.replace('open','closed');
}
else {
elem.className = elem.className.replace('hidden','visible');
this.className = this.className.replace('closed','open');
}
return false;
}
})(links[i]);
}
}
}
*/
/*
function filterchanges(type){
var lists = document.getElementsByTagName('ul');
for(var i in lists){
if(lists[i].className && lists[i].className.search('changes')>=0) {
for(var j in lists[i].childNodes){
if(lists[i].childNodes[j].nodeType == 1){
if(!type){
lists[i].childNodes[j].style.display = 'block';
}
else if(lists[i].childNodes[j].className!=type) {
lists[i].childNodes[j].style.display = 'none';
}
else {
lists[i].childNodes[j].style.display = 'block';
}
}
}
}
}
}
*/
function dropdowns() {
var drops = $('div.drop');
var indrops = $('div.indrop');
if(drops.length!=indrops.length){
alert("Some coder fucked up with dropdowns");
}
drops.each(function(index){
$(this).toggleClass('closed');
$(indrops[index]).hide();
$(this).click(function(){
$(this).toggleClass('closed');
$(this).toggleClass('open');
$(indrops[index]).toggle();
});
});
}
function filterchanges(type){
$('ul.changes li').each(function(){
if(!type || $(this).hasClass(type)){
$(this).show();
}
else {
$(this).hide();
}
});
}
$(document).ready(function(){
dropdowns();
});

View File

@@ -0,0 +1,19 @@
Changelogs are included with commits as text .yml files created individually by the committer. If you want to create a changelog entry you create a .yml file in the /changelogs directory; nothing else needs to be touched unless you are a maintainer.
#######################################################
TO MAKE A CHANGELOG .YML ENTRRY
1. Make a copy of the file example.yml in html/changelogs and rename it to [YOUR USERNAME]-PR-[YOUR PR NUMBER].yml (the pr and pr number are organizational and can be ignored if you so wish)
2. Change the author to yourself
3. Replace the changes text with a description of the changes in your PR, keep the double quotes to avoid errors (your changelog can be written ICly or OOCly, it doesn't matter)
4. (Optional) set the change prefix (rscadd) to a different one listed above in example.yml (this affects what icon is used for your changelog entry)
5. When commiting make sure your .yml file is included in the commit (it will usually be unticked as an unversioned file)
#######################################################
If you have trouble ask for help in #codershuttle on irc.sorcery.net or read https://tgstation13.org/wiki/Guide_to_Changelogs

View File

@@ -0,0 +1,36 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# spellcheck (typo fixes)
# experiment
#################################
# Your name.
author: N3X15
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: "Added a changelog editing system that should cause fewer conflicts and more accurate timestamps."
- rscdel: "Killed innocent kittens."

View File

@@ -27,7 +27,7 @@
<form name="spawner" action="byond://?src=/* ref src */" method="get">
<input type="hidden" name="src" value="/* ref src */">
Type <input type="text" name="filter" value="" onkeypress="submitFirst(event)" style="width:350px"> <input type = "button" value = "Search" onclick = "updateSearch()" /><br>
Type <input type="text" name="filter" value="" onkeypress="submitFirst(event)" style="width:280px;height:25"> <input type = "button" value = "Search" onclick = "updateSearch()" /><br>
Offset: <input type="text" name="offset" value="x,y,z" style="width:250px">
A <input type="radio" name="offset_type" value="absolute">
@@ -44,7 +44,7 @@
</select>
<br><br>
<select name="object_list" id="object_list" size="18" multiple style="width:98%"></select><br>
<input type="submit" value="Spawn">
<input type="submit" value="spawn">
</form>
<script language="JavaScript">
@@ -72,12 +72,19 @@
function updateSearch()
{
if (old_search == document.spawner.filter.value)
{
return;
}
old_search = document.spawner.filter.value;
var filtered = new Array();
for(var i in objects)
var i;
for (i in objects)
{
if(objects[i].indexOf(old_search) < 0)
if(objects[i].search(old_search) < 0)
{
continue;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 810 B

View File

@@ -1,392 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Space Station 13 Help</title>
<style type="text/css">
body
{
color: #000;
background: #fff;
font-size: 9pt;
font-family: Verdana, sans-serif;
}
h1, h2, h3, h4, h5, h6
{
color: #00f;
font-family: Georgia, Arial, sans-serif;
}
a, a:link, a:visited, a:active, a:hover
{
color: #00f;
text-decoration: underline;
}
a:hover
{
text-decoration: none;
}
</style>
</head>
<body>
<h1>Space Station 13</h1>
<ul>
<li><a href="#overview">Overview</a></li>
<li><a href="#objectives">Objectives</a></li>
<li>
<a href="#modes">Modes</a>
<ul>
<li><a href="#mode_blob">Blob</a></li>
<li><a href="#mode_traitor">Traitor</a></li>
<li><a href="#mode_meteor">Meteor</a></li>
<li><a href="#mode_monkey">Monkey</a></li>
<li><a href="#mode_nuclear">Nuclear Emergency</a></li>
</ul>
</li>
<li><a href="#getting_around">Getting Around</a></li>
<li><a href="#getting_started">Getting Started</a></li>
<li>
<a href="#jobs">Jobs</a>
<ul>
<li><a href="#job_assistant">Assistant</a></li>
<li><a href="#job_atmospheric">Atmospheric Technician</a></li>
<li><a href="#job_doctor">Medical Doctor</a></li>
<li><a href="#job_engineer">Station Engineer</a></li>
<li><a href="#job_security">Security Officer</a></li>
<li><a href="#job_scientist">Scientist</a></li>
<li><a href="#job_forensic">Forensic Technician</a></li>
<li><a href="#job_geneticist">Geneticist</a></li>
<li><a href="#job_chaplain">Chaplain</a></li>
<li><a href="#job_head_research">Head of Research</a></li>
<li><a href="#job_head_personnel">Head of Personnel</a></li>
<li><a href="#job_ai">AI</a></li>
<li><a href="#job_captain">Captain</a></li>
</ul>
</li>
<li><a href="#movement">Movement</a></li>
<li><a href="#equipping">Equipping</a></li>
<li><a href="#talking">Talking</a></li>
<li><a href="#takegive">Taking Items / Giving Items</a></li>
<li><a href="#death">Death</a></li>
<li><a href="#links">External Links</a></li>
</ul>
<a name="overview"></a>
<h2>Overview</h2>
<p>
Space Station 13 was written for BYOND. Like many BYOND games, it is two
dimensional with a top down view and runs terribly. It uses tile-based
movement. Space Station 13 (or SS13 for short) starts you on a space station
orbiting a very peculiar gaseous planet in a binary star system. Each round
type is centred around a specific type of disaster, ranging from a meteor
shower to a traitor within the crew. The game is constantly being developed,
so new modes are added all the time!
</p>
<a name="objectives"></a>
<h2>Objectives</h2>
<p>
The primary objective in most modes of Space Station 13 is survival. You must
try to stay alive long enough to escape on the evacuation shuttle. This
doesn't mean you should immediately rush to the escape dock and wall yourself
in; half the fun is in trying to keep the station running for as long as
possible. Exactly how you do this is up to you and your assigned job.
</p>
<a name="modes"></a>
<h2>Modes</h2>
<a name="mode_blob"></a>
<h3>Blob</h3>
<p>
A deadly mutagenous virus has been released and the crew must fight a green
mass for control of the station. The blob spreads quickly, and only the
sacred welder can fight it back! (Unless it spawns in the engine and dies
instantly.)
</p>
<p>
<b>PROTIP: USE A WELDER</b>
</p>
<a name="mode_traitor"></a>
<h3>Traitor</h3>
<p>
In traitor mode there is a traitor aboard the space station!!! The traitor is
assigned a random objective, from escaping alone to stealing the captain's
jumpsuit. The objective of everyone else is to stop the traitor and survive!
</p>
<a name="mode_meteor"></a>
<h3>Meteor</h3>
<p>
In Meteor, the station is threatened by a meteor shower. The objective is to
do your best to repair and maintain the station, and eventually escape.
</p>
<a name="mode_monkey"></a>
<h3>Monkey</h3>
<p>
In Monkey mode a deadly mutagenous virus has been released and the crew must
fight small underdeveloped primates for control of the station. The monkey's
bite is deadly, and anyone bitten will soon join the primate horde.
</p>
<p>
<b>PROTIP: ELECTRIC GRILLES ARE PRETTY DANGEROUS.</b>
</p>
<a name="mode_nuclear"></a>
<h3>Nuclear Emergency</h3>
<p>
A crack team of Syndicate operatives have assaulted the station in order to
gather a nuclear activation key. If found, the team will detonate a NUCLEAR
BOMB and the station will be destroyed! The team must escape with the nuclear
activation key while fighting off the syndicate.
</p>
<p>
<b>PROTIP: IF YOU KILL A MEMBER OF THE SYNDICATE STEAL HIS STUFF.</b>
</p>
<a name="getting_around"></a>
<h2>Getting Around</h2>
<p>
The interface for Space Station 13 is largely click driven. To use something,
you will almost always click or double click.
</p>
<a name="getting_started"></a>
<h2>Getting Started</h2>
<p>
<i>(A Quick jump-start guide to get into the game)</i>
</p>
<p>
Select your preferences using the character setup command and then use ready
to enter the game.
</p>
<p>
If you do this after the game has started you will spawn as an assistant;
otherwise, a vague guide to the jobs you may choose follows.
</p>
<a name="jobs"></a>
<h2>Jobs</h2>
<a name="job_assistant"></a>
<h3>Assistant</h3>
<p>
You'll spawn as this if you enter after a game has started. Assistants have a
very low-access ID card, and really nothing else. They don't however have any
duties, so this can be a pretty good way to learn the layout of the station
if you join midway through a round. It's really not worth choosing this,
though.
</p>
<a name="job_atmospheric"></a>
<h3>Atmospheric Technician</h3>
<p>
This involves looking after the atmospheric systems on the station, as you
can probably guess. In theory, you'll be checking the air composition of the
station with an analyzer and making sure that it's not going to kill people.
In reality, you'll be cleaning up the constant gas spills caused by griefers
and the traitor via use of the pipe filters in the maintenance tunnel (which
are pretty self-explanatory) and the portable filters that are around the
station and in Atmospheric Storage. This is probably the easiest job for a
new player, so jump in as this and getting a feel for the station layout and
the basic workings of the game before you try anything else.
</p>
<a name="job_doctor"></a>
<h3>Medical Doctor</h3>
<p>
Pretty much self explanatory. Grab a Medkit, and either patrol the station
treating the gassed/beaten crewmembers who will be lying around within 20
minutes of any game starting or stay in Medical and heal the people who get
dragged in. More advanced medical is explained in weasello's guide below.
</p>
<a name="job_engineer"></a>
<h3>Station Engineer</h3>
<p>
This can be one of the more technical jobs, but it doesn't take a huge amount
of time to learn. Basically, the Engineers handle the engine itself (which
involves keeping it fed with plasma, igniting it, and so on.) and the repair
of the station. Weasello's stuff has a reasonably good guide to the basics of
this, and you should be able to work the rest out by jumping on one of the
empty servers and tinkering about for twenty minutes or so. This isn't a bad
place to start, but messing up with the engines can kill every single person
on the station so be fucking careful.
</p>
<a name="job_security"></a>
<h3>Security Officer</h3>
<p>
Open your locker, grab a stun baton and then patrol the station and hit
people. That's it.
</p>
<p>
<b>PROTIP: KILLING PEOPLE OR BEING A DICK WILL GET YOU BANNED.</b>
</p>
<a name="job_scientist"></a>
<h3>Scientist</h3>
<p>
Scientists are essentially the bombmakers. Weasello's guide has a reasonably
complex explanation of what you're supposed to do here, but basically you'll
be heating plasma and assembling bomb circuitry. Security and the AI will
almost certainly be keeping a close eye on you if you choose to do this, so
I'd you play around a bit with Atmos and get some experience before trying
this.
</p>
<a name="job_forensic"></a>
<h3>Forensic Technician</h3>
<p>
Seriously, don't bother with this. It's arguably the most boring job of all,
and can be one of the most annoying to get to grips with. Forensic Techs take
fingerprints from people and objects and check them against their records.
That's pretty much it. With the relatively short length of games on the goon
server, this isn't really worth doing in itself, as any security man can be a
Forensic Tech if needed.
</p>
<a name="job_geneticist"></a>
<h3>Geneticist</h3>
<p>
This is pretty much the most complex job on the station. Don't touch this
until you've played for a while. Geneticists can directly edit the DNA of
other players and monkeys, and as such can bring people back to life, change
their skin colour, or turn a human into a monkey or vice versa. It's all far
too complex and annoying to be worth typing out here. There's probably a more
complex guide for this around, go find it if you REALLY want to do this.
</p>
<a name="job_chaplain"></a>
<h3>Chaplain</h3>
<p>
AARHGFHGHGH I FUCKING LOVE TO PRAY
</p>
<a name="job_head_research"></a>
<h3>Head of Research</h3>
<p>
The Head of Research essentially administers Medical and Toxins research and
has an ID-card with quite high access. This isn't really a good choice at all
for a new player as it implies a degree of experience with the game.
Practically, you'll be helping out Toxins and Medical and occasionally being
attacked for your ID card.
</p>
<a name="job_head_personnel"></a>
<h3>Head of Personnel</h3>
<p>
This one really is only for players with a little bit of experience. The Head
of Personnel is in charge of Security and managers the positions of the
people on the station; they have access to the personnel records and can edit
the ID cards and thus positions of crewmembers as they wish. They also start
next to a locker which contains a laser pistol, which can be useful for a
traitor or in self defense. Traitors will often target the HoP for his ID
card and special equipment, as well.
</p>
<a name="job_ai"></a>
<h3>AI</h3>
<p>
Don't do this. It carries a huge amount of power as well as massive
limitations, as the AI is bound by Asimov's laws. The AI can control any of
the electrical systems on the station, including the air supply, engine blast
doors and power. Making a stupid mistake as the AI will very possibly kill
several people, so stay away from this until you have a little bit of
experience with the game.
</p>
<a name="job_captain"></a>
<h3>Captain</h3>
<p>
Self explanatory. An all-access ID card, total power over the crew, guns and
a personal teleporter. ABSOLUTELY DO NOT DO THIS UNTIL YOU HAVE SOME
EXPERIENCE WITH THE GAME OR YOU WILL PISS OFF OTHER PLAYERS.
</p>
<a name="movement"></a>
<h2>Movement</h2>
<p>
Movement on SS13 is only in the 4 cardinal directions. The diagonal
directions throw/drop items, switch hand/modes. If you move into a dense
object you first try to push it. Not all items can be pushed. You can also
right click on an object and select 'pull' and then every movement you make
will ttempt to drag that object behind you. If you wish to stop pulling you
must go onto your on-screen display and find the object with a person in a
box. Click on it and you will stop pulling. If you ever desire to make sure
of which direction you are facing use .center and then try to move what
direction you want to face.
</p>
<a name="equipping"></a>
<h2>Equipping</h2>
<p>
You 'equip' items in SS13 by picking them up. In order to pick an item up all
you must do is attack it with a free hand. Now you hae two hands. Which hand
is being used is indicated by the blue button in the lower-left area of your
HUD. You can change hands by clicking the hand button or pressing the
.northeast macro. You can then also then transfer that item to another part
of your body. In order to do this you just attack the green box (or blue
storage box) on your hud that you would like to move it to. In order to
'unequip' a equipped item that is not in your hand. Get a free hand and
attack the item. Then in order to drop an item in your hand (and make it a
free hand again) click the drop button (or throw to throw the item wherever
you are facing).
</p>
<a name="talking"></a>
<h2>Talking</h2>
<p>
Talking on SS13 is still via the say verb so the normal say speech bubble on
the command line will still work. Please note however that you can whisper.
More on this in the items selection under radio, intercoms, and headsets.
There are a lot of emotes that are accessed by preceding your text with a
'*'. To view a list of available emotes for your character use the type
'*help' into the say menu. To speak via your headset use a semicolon after
say.
</p>
<a name="takegive"></a>
<h2>Taking Items / Giving Items</h2>
<p>
You can take items from people by dragging their mob onto your mob. A screen
will pop up. From this screen you can select an object to remove from them.
If you select a 'Nothing' slot then you will attempt to equip that slot with
the object you are holding.
</p>
<a name="death"></a>
<h2>Death</h2>
<p>
If you are dead then you can use the watch verb to look through the eyes of
another mob. Depending on circumstances you can use abandon mob to restart
(leaving that box blank gives you a random name). A dead person hears
everything that is said but might not hear all attack messages.
</p>
<a name="links"></a>
<h2>External Links</h2>
<ul>
<li>
<a target="_blank" href="http://www.declassified-ss13.com/servers.php">Servers</a> (just
a quick and dirty list of servers to connect to)
</li>
<li>
<a target="_blank" href="http://www.declassified-ss13.com/cheatsheets.php">Cheat
Sheets</a> (point-form processes, constantly being updated)
</li>
<li>
<a target="_blank" href="http://www.maplib.net/atlas.php?id=347">Maps</a> (goon servers
all use these maps)
</li>
<li>
<a target="_blank" href="http://www.declassified-ss13.com/">Space Station 13
Declassified</a>
</li>
</ul>
</body>
</html>

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

View File

@@ -1,77 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>New commit</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="changelog.css">
<style>
body {margin:0;padding:0 10px;}
#addli {cursor:pointer;}
span {font-weight:bold;}
span.icon {width:16px;height:16px;display:inline-block;float:right;}
input.li {width:100%;}
#table {width:99%;}
#result {width:100%;}
</style>
<script type="text/javascript">
var i=1;
function createli(event){
event.preventDefault();
var liclass = $('#litype').val();
$('#table').append($('<tr><td><span class="icon '+liclass+'"></span><span>'+i+'.</span></td><td><input name="'+liclass+'" type="text" value="" class="li"></td></tr>'));
i++;
}
function htmlEscape(str) {
return String(str)
.replace(/&/g, '&amp;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#39;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;');
}
$(document).ready(function(){
$('#addli').click(createli);
$('#commit').submit(function(event){
event.preventDefault();
var result = $('#result');
var text = '<div class="commit sansserif">\n';
text += '\t<h2 class="date">'+$(this.date).val()+'</h2>\n';
text += '\t<h3 class="author">'+$(this.author).val()+' updated:</h3>\n';
text += '\t<ul class="changes bgimages16">\n';
$('input.li').each(function(){
text += '\t\t<li class="'+$(this).attr('name')+'">'+$(this).val()+'</li>\n';
});
text += '\t</ul>\n';
text += '</div>\n';
result.val(text);
});
});
</script>
</head>
<body>
<form id="commit" name="commit">
<table id="table">
<tr><td style="width:100px;"><span>Date:</span></td><td><input type="text" name="date" value="" title="Put date here"></td></tr>
<tr><td><span>Author:</span></td><td><input type="text" name="author" value="" title="Put your name here"></td></tr>
<tr><td><span>Add list item</span></td><td>
<select name="litype" id="litype" title="Select change type and hit +">
<option value="rscadd">Added feature</option>
<option value="rscdel">Removed feature</option>
<option value="bugfix">Bugfix</option>
<option value="wip">Work in progress</option>
<option value="tweak">Tweak</option>
<option value="experiment">Experimental feature</option>
<option value="imageadd">Added icon</option>
<option value="imagedel">Removed icon</option>
<option value="soundadd">Added sound</option>
<option value="sounddel">Removed sound</option>
</select>
<button id="addli">+</button>
</td></tr>
</table>
<input type="submit" value="Get HTML" title="Click here to get result">
</form>
<textarea id="result" rows="20" cols="50"></textarea>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 958 B

View File

@@ -0,0 +1,13 @@
</div>
<b>GoonStation 13 Development Team</b>
<div class = "top">
<b>Coders:</b> Stuntwaffle, Showtime, Pantaloons, Nannek, Keelin, Exadv1, hobnob, Justicefries, 0staf, sniperchance, AngriestIBM, BrianOBlivion<br>
<b>Spriters:</b> Supernorn, Haruhi, Stuntwaffle, Pantaloons, Rho, SynthOrange, I Said No<br>
</div>
<br>
<p class="lic"><a name="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img src="88x31.png" alt="Creative Commons License" /></a><br><i>Except where otherwise noted, Goon Station 13 is licensed under a <a href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 License</a>.<br>Rights are currently extended to <a href="http://forums.somethingawful.com/">SomethingAwful Goons</a> only.</i></p>
<p class="lic">Some icons by <a href="http://p.yusukekamiyamane.com/">Yusuke Kamiyamane</a>. All rights reserved. Licensed under a <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 License</a>.</p>
</td></tr></table>
</body>
</html>

View File

@@ -0,0 +1,58 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Baystation 12 Changelog</title>
<link rel="stylesheet" type="text/css" href="changelog.css">
<base target="_blank" />
<script type='text/javascript'>
function changeText(tagID, newText, linkTagID){
var tag = document.getElementById(tagID);
tag.innerHTML = newText;
var linkTag = document.getElementById(linkTagID);
linkTag.removeAttribute("href");
linkTag.removeAttribute("onclick");
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<table align='center' width='650'><tr><td>
<table align='center' class="top">
<tr>
<td valign='top'>
<div align='center'><font size='3'><b>Space Station 13</b></font></div>
<p><div align='center'><font size='3'><a href="http://baystation12.net/wiki/">Wiki</a> | <a href="https://github.com/Baystation12/Baystation12/">Source code</a></font></div></p>
<font size='2'>Code licensed under <a href="http://www.gnu.org/licenses/agpl.html">GPLv3</a>. Content licensed under <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0</a>.<br><br>
<font size='2'><b>Visit our IRC channel:</b> #bs12 on irc.sorcery.net</font>
</td>
</tr>
</table>
<br><b>Baystation 12 Credit List</b>
<table align='center' class="top">
<tr>
<td valign='top'>
<font size='2'><b>Current Project Maintainers:</b> <a href='https://github.com/Baystation12?tab=members'>-Click Here-</a><br></font>
<font size='2'><b>Currently Active GitHub contributor list:</b> <a href='https://github.com/Baystation12/Baystation12/graphs/contributors'>-Click Here-</a><br></font>
<font size='2'><b>Code:</b> Abi79, Aryn, Cael_Aislinn, Ccomp5950, Chinsky, cib, CompactNinja, DopeGhoti, Erthilo, Hawk_v3, Head, Ispil, JoeyJo0, Lexusjjss, Melonstorm, Miniature, Mloc, NerdyBoy1104, PsiOmegaDelta, SkyMarshal, Snapshot, Spectre, Strumpetplaya, Sunfall, Tastyfish, Uristqwerty<br></font>
<font size='2'><b>Sprites:</b> Apple_Master, Arcalane, Chinsky, CompactNinja, Deus Dactyl, Erthilo, Flashkirby, JoeyJo0, Miniature, Searif, Xenone, faux<br></font>
<font size='2'><b>Sounds:</b> Aryn<br></font>
<font size='2'><b>Main Testers:</b> Anyone who has submitted a bug to the issue tracker<br></font>
<font size='2'><b>Thanks to:</b> /tg/ station, /vg/station, GoonStation devs, the original SpaceStation developers and Invisty for the title image.<br> Also a thanks to anybody who has contributed who is not listed here :( Ask to be added here on irc.</font>
<font size='2' color='red'><b><br>Have a bug to report?</b> Visit our <a href="https://github.com/Baystation12/Baystation12/issues?labels=Bug&state=open">Issue Tracker</a>.<br></font>
</td>
</tr>
</table>
<!--
TO ADD AN ENTRY, ADD AND MAINTAIN YOUR OWN changelog/USERNAME.yml FILE.
*** DO NOT MODIFY THIS FILE OR YOU WILL CAUSE MERGE CONFLICTS. ***
-->
<div class="commit sansserif">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 819 B

View File

@@ -0,0 +1,4 @@
@echo off
rem Cheridan asked for this. - N3X
call python ss13_genchangelog.py ../../html/changelog.html ../../html/changelogs
pause

View File

@@ -0,0 +1,210 @@
'''
Usage:
$ python ss13_genchangelog.py [--dry-run] html/changelog.html html/changelogs/
ss13_genchangelog.py - Generate changelog from YAML.
Copyright 2013 Rob "N3X15" Nelson <nexis@7chan.org>
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.
'''
from __future__ import print_function
import yaml, os, glob, sys, re, time, argparse
from datetime import datetime, date
from time import time
today = date.today()
dateformat = "%d %B %Y"
opt = argparse.ArgumentParser()
opt.add_argument('-d', '--dry-run', dest='dryRun', default=False, action='store_true', help='Only parse changelogs and, if needed, the targetFile. (A .dry_changelog.yml will be output for debugging purposes.)')
opt.add_argument('targetFile', help='The HTML changelog we wish to update.')
opt.add_argument('ymlDir', help='The directory of YAML changelogs we will use.')
args = opt.parse_args()
all_changelog_entries = {}
validPrefixes = [
'bugfix',
'wip',
'tweak',
'soundadd',
'sounddel',
'rscdel',
'rscadd',
'imageadd',
'imagedel',
'spellcheck',
'experiment',
'tgs'
]
def dictToTuples(inp):
return [(k, v) for k, v in inp.items()]
changelog_cache = os.path.join(args.ymlDir, '.all_changelog.yml')
failed_cache_read = True
if os.path.isfile(changelog_cache):
try:
with open(changelog_cache) as f:
(_, all_changelog_entries) = yaml.load_all(f)
failed_cache_read = False
# Convert old timestamps to newer format.
new_entries = {}
for _date in all_changelog_entries.keys():
ty = type(_date).__name__
# print(ty)
if ty in ['str', 'unicode']:
temp_data = all_changelog_entries[_date]
_date = datetime.strptime(_date, dateformat).date()
new_entries[_date] = temp_data
else:
new_entries[_date] = all_changelog_entries[_date]
all_changelog_entries = new_entries
except Exception as e:
print("Failed to read cache:")
print(e, file=sys.stderr)
if args.dryRun:
changelog_cache = os.path.join(args.ymlDir, '.dry_changelog.yml')
if failed_cache_read and os.path.isfile(args.targetFile):
from bs4 import BeautifulSoup
from bs4.element import NavigableString
print(' Generating cache...')
with open(args.targetFile, 'r') as f:
soup = BeautifulSoup(f)
for e in soup.find_all('div', {'class':'commit'}):
entry = {}
date = datetime.strptime(e.h2.string.strip(), dateformat).date() # key
for authorT in e.find_all('h3', {'class':'author'}):
author = authorT.string
# Strip suffix
if author.endswith('updated:'):
author = author[:-8]
author = author.strip()
# Find <ul>
ulT = authorT.next_sibling
while(ulT.name != 'ul'):
ulT = ulT.next_sibling
changes = []
for changeT in ulT.children:
if changeT.name != 'li': continue
val = changeT.decode_contents(formatter="html")
newdat = {changeT['class'][0] + '': val + ''}
if newdat not in changes:
changes += [newdat]
if len(changes) > 0:
entry[author] = changes
if date in all_changelog_entries:
all_changelog_entries[date].update(entry)
else:
all_changelog_entries[date] = entry
del_after = []
print('Reading changelogs...')
for fileName in glob.glob(os.path.join(args.ymlDir, "*.yml")):
name, ext = os.path.splitext(os.path.basename(fileName))
if name.startswith('.'): continue
if name == 'example': continue
fileName = os.path.abspath(fileName)
print(' Reading {}...'.format(fileName))
cl = {}
with open(fileName, 'r') as f:
cl = yaml.load(f)
f.close()
if today not in all_changelog_entries:
all_changelog_entries[today] = {}
author_entries = all_changelog_entries[today].get(cl['author'], [])
if len(cl['changes']):
new = 0
for change in cl['changes']:
if change not in author_entries:
(change_type, _) = dictToTuples(change)[0]
if change_type not in validPrefixes:
print(' {0}: Invalid prefix {1}'.format(fileName, change_type), file=sys.stderr)
author_entries += [change]
new += 1
all_changelog_entries[today][cl['author']] = author_entries
if new > 0:
print(' Added {0} new changelog entries.'.format(new))
if cl.get('delete-after', False):
if os.path.isfile(fileName):
if args.dryRun:
print(' Would delete {0} (delete-after set)...'.format(fileName))
else:
del_after += [fileName]
if args.dryRun: continue
cl['changes'] = []
with open(fileName, 'w') as f:
yaml.dump(cl, f, default_flow_style=False)
targetDir = os.path.dirname(args.targetFile)
with open(args.targetFile.replace('.htm', '.dry.htm') if args.dryRun else args.targetFile, 'w') as changelog:
with open(os.path.join(targetDir, 'templates', 'header.html'), 'r') as h:
for line in h:
changelog.write(line)
for _date in reversed(sorted(all_changelog_entries.keys())):
entry_htm = '\n'
entry_htm += '\t\t\t<h2 class="date">{date}</h2>\n'.format(date=_date.strftime(dateformat))
write_entry = False
for author in sorted(all_changelog_entries[_date].keys()):
if len(all_changelog_entries[_date]) == 0: continue
author_htm = '\t\t\t<h3 class="author">{author} updated:</h3>\n'.format(author=author)
author_htm += '\t\t\t<ul class="changes bgimages16">\n'
changes_added = []
for (css_class, change) in (dictToTuples(e)[0] for e in all_changelog_entries[_date][author]):
if change in changes_added: continue
write_entry = True
changes_added += [change]
author_htm += '\t\t\t\t<li class="{css_class}">{change}</li>\n'.format(css_class=css_class, change=change.strip())
author_htm += '\t\t\t</ul>\n'
if len(changes_added) > 0:
entry_htm += author_htm
if write_entry:
changelog.write(entry_htm)
with open(os.path.join(targetDir, 'templates', 'footer.html'), 'r') as h:
for line in h:
changelog.write(line)
with open(changelog_cache, 'w') as f:
cache_head = 'DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.'
yaml.dump_all([cache_head, all_changelog_entries], f, default_flow_style=False)
if len(del_after):
print('Cleaning up...')
for fileName in del_after:
if os.path.isfile(fileName):
print(' Deleting {0} (delete-after set)...'.format(fileName))
os.remove(fileName)