A billion changes. Pushing for release.
parent
eaa57c7dba
commit
e6b55028e4
34
TODO.ktx
34
TODO.ktx
|
@ -1,34 +0,0 @@
|
|||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Things That This Being Must Do
|
||||
````````````````````````````````
|
||||
For my own benefit, I've put my TODO in this most public of places.
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Things I have to do anyway
|
||||
````````````````````````
|
||||
* Finish Dr. Cole's site, along with mobile styling
|
||||
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Polymathic Things
|
||||
````````````````````````
|
||||
* Hustle to get Vashram stand-alone going
|
||||
* Resume Celestial Carnage - see its TODO
|
||||
* Implement timesynk's Virtual Machine compiler
|
||||
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Fun Things of Precedence
|
||||
````````````````````````
|
||||
* Create timelapse videos for Newsboy and VAD
|
||||
* Finish up SDL renderer for VAD 0.2 and release it.
|
||||
* Create a narrative of Carmack's idTech engines for the YouTubes
|
||||
* Finish LootKeeper and Get It Out There
|
||||
* Implement last aspects of MediaServe (JavaScript linkage)
|
||||
* Implement networking of ktk_walker and test it out
|
||||
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Extraneous Things of Learning
|
||||
````````````````````````
|
||||
* Learn to read Braille
|
||||
* Resume learning Japanese
|
||||
* Begin learning Chinese
|
||||
* Learn ASL or some equivalent
|
||||
* Learn Russian
|
|
@ -0,0 +1 @@
|
|||
Approach others first as a friend, then as a teacher -- in all ways possible, speak to promote learning and experimentation.
|
2
build.sh
2
build.sh
|
@ -64,3 +64,5 @@ do
|
|||
cp $f live/plans/$base
|
||||
#../kettext/kettext.pl $f --version.none > live/plans/$base
|
||||
done
|
||||
echo "Copying pubkey..."
|
||||
cp pubkey.gpg live/pubkey.gpg
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -32,8 +32,8 @@ img {
|
|||
text-align: center;
|
||||
}
|
||||
.thumbnail {
|
||||
max-width: 280px;
|
||||
max-height: 157px;
|
||||
max-width: 300px;
|
||||
max-height: 300px;
|
||||
float: right;
|
||||
}
|
||||
/* general helper classes */
|
||||
|
@ -187,10 +187,11 @@ img {
|
|||
#content pre {
|
||||
width: auto;
|
||||
padding: 0.5em;
|
||||
margin: 2em;
|
||||
margin: 1em 1em 2em 2em;
|
||||
background-color: #D0D0D1;
|
||||
color: #121;
|
||||
font-family: "ProggyTinySZ";
|
||||
font-size: 12pt;
|
||||
line-height: 70%;
|
||||
width: 500px; /* specify width */
|
||||
white-space: pre-wrap; /* CSS3 browsers */
|
||||
|
@ -199,22 +200,26 @@ img {
|
|||
white-space: -o-pre-wrap; /* Opera 7 and up */
|
||||
word-wrap: break-word; /* IE 5.5+ and up */
|
||||
}
|
||||
#content pre code:after {
|
||||
#content pre {
|
||||
border: 0.1em solid #B0B0B1;
|
||||
padding: 0.25em;
|
||||
}
|
||||
/*#content pre code:after {
|
||||
content: 'code';
|
||||
width: 100%;
|
||||
display: block; text-align: right;
|
||||
color: #B0B0B1;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
}*/
|
||||
#content code {
|
||||
font-family: "ProggyTinySZ";
|
||||
}
|
||||
|
||||
#content h1:hover, h2:hover, h3:hover, h4:hover, h5:hover, h6:hover {
|
||||
/*#content h1:hover, h2:hover, h3:hover, h4:hover, h5:hover, h6:hover {
|
||||
color: #CaCf90;
|
||||
cursor: pointer;
|
||||
}
|
||||
}*/
|
||||
#content img {
|
||||
}
|
||||
#content iframe {
|
||||
|
|
|
@ -119,3 +119,25 @@
|
|||
-moz-box-shadow:0 0px 1px rgba(0, 0, 0, 0.8);
|
||||
box-shadow:0 0px 1px rgba(0, 0, 0, 0.8);
|
||||
}
|
||||
|
||||
#popup {
|
||||
display:block;
|
||||
position:fixed;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
-webkit-box-shadow:0 0px 8px rgba(0, 0, 0, 0.8);
|
||||
-moz-box-shadow:0 0px 8px rgba(0, 0, 0, 0.8);
|
||||
box-shadow:0 0px 8px rgba(0, 0, 0, 0.8);
|
||||
-webkit-border-radius:3px 3px 3px 3px;
|
||||
-moz-border-radius:3px 3px 3px 3px;
|
||||
border-radius:3px 3px 3px 3px;
|
||||
}
|
||||
|
||||
.thumbnail {
|
||||
-webkit-box-shadow:0 0px 5px rgba(0, 0, 0, 0.5);
|
||||
-moz-box-shadow:0 0px 5px rgba(0, 0, 0, 0.5);
|
||||
box-shadow:0 0px 5px rgba(0, 0, 0, 0.5);
|
||||
-webkit-border-radius:2px 2px 2px 2px;
|
||||
-moz-border-radius:2px 2px 2px 2px;
|
||||
border-radius:2px 2px 2px 2px;
|
||||
}
|
||||
|
|
4
dox.ktx
4
dox.ktx
|
@ -1,4 +0,0 @@
|
|||
.imply(version.hide)
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Documents and Articles
|
||||
````````````````````````````````
|
|
@ -0,0 +1,89 @@
|
|||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Desktop Feng Shui
|
||||
''''''''''''''''''''''''''''''''
|
||||
Every desktop and its surroundings possesses particular senses of balance and
|
||||
harmony that may influence the feelings of the user.
|
||||
|
||||
For software developers, and in particular programmers, desktop feng shui is
|
||||
of particular importance, as visual distractions and imbalances can be
|
||||
detrimental to one's capability to work.
|
||||
|
||||
Although each developer's sense and needs of harmony will differ - and some
|
||||
may not even care or be affected much by such things - in general a sense of
|
||||
good order is of importance. Order is at the foundation of good program design
|
||||
and commenting quality, and as such, this should be emphasized by the
|
||||
environment as well.
|
||||
|
||||
Although not required, tiling window managers are excellent methods of
|
||||
enforcing balance and efficiency within the desktop. Even further, the
|
||||
organization of tiling itself, when combined with display sizes and aspect
|
||||
ratios, can enhance harmony and order greatly.
|
||||
|
||||
For non-tiling window managers, it is best to keep your desktop in good order,
|
||||
with minimal clutter and strong organization. Failing to do so introduces
|
||||
visual clutter that can easily distract the mind from concentration.
|
||||
|
||||
Colors, especially of IDEs and terminals, can play important roles in enhancing
|
||||
concentration and decreasing distractions. In general, muted colors can provide
|
||||
a peaceful sense to the environment, although sometimes can be detrimental when
|
||||
strong notifications are wanted.
|
||||
|
||||
The guiding principles for colors should general be to draw focus to the areas
|
||||
one cares about the most. For programming, this generally means that comment
|
||||
areas and folded sections of code should not draw as much attention and should
|
||||
hold to colors that do not call as much attention to themselves. Types,
|
||||
variables, and values should generally call more attention and should be of
|
||||
brighter and more complex coloring. General text should be of a neutral tone
|
||||
at a sufficient brightness so as to not be drowned out by the emphasized
|
||||
texts.
|
||||
|
||||
In general, color schemes fall into light and dark schemes, usually of
|
||||
complementary or partially complementary inverted schemes. Although varying
|
||||
from individual to individual, darker schemes can promote a strong sense of
|
||||
focus, especially if bordered by much brighter color schemes. In this way, a
|
||||
dark scheme in the primary programming editor window, if surrounded by
|
||||
brighter schemes containing more information or debugging information, acts as
|
||||
the center point, drawing focus to itself whilst also keeping contained and
|
||||
isolated from the others - i.e., a bastion of focus.
|
||||
|
||||
Additionally, the background also plays an important role. Whether it is the
|
||||
precise shade of the color scheme or a graphical background image seen through
|
||||
transparency, the background can promote a sense to the experience and promote
|
||||
particular thoughts in greater earnest. In this sense, it is usually wisest to
|
||||
choose backgrounds that motivate you or promote senses of peace. These
|
||||
backgrounds, if graphical, should likely change to match what you are
|
||||
developing, so as to promote subconscious thought and provide positive
|
||||
reinforcement.
|
||||
|
||||
Such principles do not need to be isolated to just the virtual desktop, but
|
||||
can also be expanded to include multiple monitors, the physical desktop, and
|
||||
most everything that can fall within the visual field.
|
||||
|
||||
In multi-monitor setups, the distance between monitors, orientations, and size
|
||||
discrepancies can play crucial roles in what feelings are emphasized in the
|
||||
user. Physical distances between monitors can play a similar role to the
|
||||
previously mentioned dark-amidst-light focus scheming. Orientation can promote
|
||||
certain patterns of usage, such as portrait for reading manual pages, or
|
||||
landscape for programming - these things differ, of course, by font size and
|
||||
how many rows and columns one can fit comfortably within the height and width.
|
||||
With size discrepancies and orientation differences, the virtual desktops'
|
||||
placement should be adjusted so the movement of the mouse from one screen to
|
||||
the other does not contain too much difference - i.e., if moving to the right
|
||||
from Screen 1 to Screen 2, the vertical distance changed between the two
|
||||
should be minimal, and if preferred, centered.
|
||||
|
||||
Going further than this, what is beyond the physical monitors matter as well.
|
||||
Having an open view, such as a window, can be positive by enhancing moments of
|
||||
meditation and clarity, especially if a peaceful view is to be seen. However,
|
||||
if the view does not promote a sense of peace and is too distracting, the
|
||||
physical location should be adjusted. In a sense, what is behind the physical
|
||||
monitors plays the same role as desktop backgrounds and what sense you wish to
|
||||
have while developing.
|
||||
|
||||
In conclusion, one should develop a strong sense for the entirity of their
|
||||
environment, both virtual and physical, and adjust both to promote the
|
||||
sensibilities they most require. If you wish to focus more on one particular
|
||||
aspect, then mute other portions by chosing softer color schemes, smaller
|
||||
fonts, or increasing the distance between them. Acquiring the proper feng shui
|
||||
of your desktop will require your own experimentation and analysis, but it
|
||||
should be approached if you wish to optimize your own productivity.
|
|
@ -0,0 +1,74 @@
|
|||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
MAngband Hacking
|
||||
````````````````````````````````
|
||||
This document describes some technical notes/aspects of MAngband/Angband that I learned while writing an SDL2 interface (so I could play MAngband "unencumbered" on various platforms).
|
||||
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
z-terms
|
||||
````````````````````````
|
||||
MAngband, being a derivative of Angband, uses the concept of "virtual terminals" or "z-term"s. A z-term is a matrix of rows*columns of cells that correspond to a basic terminal device. Each cell in a z-term may have an "attribute", such as a color, as well as a "character". Characters may be drawn at arbitrary locations within the matrix and the z-term does various intelligent checks to ensure that the minimal amount of updates are triggered to signify an update to whatever the front-end may be.
|
||||
|
||||
Getting into the topic of front-ends, z-terms provide a set of a function pointers that act as hooks and are expected to handle certain types of data/information. These hooks are intended to be used to create, draw, and destroy a "z-term" and its interface. These hooks are:
|
||||
|
||||
* **void (*init_hook)(term *t);**
|
||||
* Function that should create the "z-term" interface
|
||||
* **void (*nuke_hook)(term *t);**
|
||||
* Function that should destroy the "z-term" interface
|
||||
* **errr (*user_hook)(int n);**
|
||||
* User-defined hook, not sure
|
||||
* **errr (*xtra_hook)(int n, int v);**
|
||||
* Extremely important function that handles "xtra" events, such as polling for events, playing a sound, delaying, etc.
|
||||
* **errr (*curs_hook)(int x, int y);**
|
||||
* Function for drawing the cursor at the given location
|
||||
* **errr (*wipe_hook)(int x, int y, int n);**
|
||||
* Function for wiping "n" characters from the given location
|
||||
* **errr (*pict_hook)(int x, byte a, char c);**
|
||||
* Function for drawing a special "pict" character -- a graphic image. Byte attribute "a" and char "c" correspond to the row and column of the desired sprite. This function is called when attr "a" and char "c" have their high bits set, thus signifying an image. Proper "row" and "column" coordinates must be acquired by toggling the high bit, e.g., "attr &= ~(1 << 7);" and "ch &= ~(1 << 7);".
|
||||
* **errr (*text_hook)(int x, int y, int n, byte a, cptr s);**
|
||||
* Function for drawing a string with attributes from the given location
|
||||
|
||||
In the case of MAngband, there are console(cap,ibm,gcu), SDL, X11, Xaw, and Windows "z-term" implementations. Each one of these implementations handles the interfacing of at least 1 "z-term" to the user interface of the implementation.
|
||||
|
||||
The base-line requirements for a "z-term" interface is to:
|
||||
|
||||
* 1. For each z-term, create a visual window
|
||||
* 2. Add in a hook to write characters and clear cells
|
||||
* 3. Handle events and sent to the appropriate z-term
|
||||
* 4. Handle closing/freeing the window
|
||||
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
MAngband z-term usage
|
||||
````````````````````````
|
||||
MAngband can use a total of 8 z-terms, the first of which is the only required one. These terms and their function descriptions are:
|
||||
|
||||
* 0 / Main "screen" window
|
||||
* 1 / ???
|
||||
* 2 / ???
|
||||
* 3 / ???
|
||||
* 4 / Chat
|
||||
* 5 / ???
|
||||
* 6 / ???
|
||||
* 7 / ???
|
||||
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Basic MAngband logic
|
||||
````````````````````````
|
||||
The main "connected" loop for MAngband is:
|
||||
|
||||
* **keymap_init();**
|
||||
* **show_motd();**
|
||||
* **Net_start()**
|
||||
* **Input_loop();**
|
||||
* 1. Sleep, then read socket
|
||||
* 2. Send commands
|
||||
* 3. Read commands via **process_command()**, then **request_command()**
|
||||
* 4. flush input via **Term_fresh()**
|
||||
* 5. **window_stuff()** ???
|
||||
* 6. Keep alive
|
||||
* **Net_cleanup();**
|
||||
* **quit(NULL);**
|
||||
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
MAngband commands and keymaps
|
||||
````````````````````````
|
||||
One of the more difficult aspects of interfacing with the "z-term" is understanding the proper way to pass keyboard input.
|
|
@ -0,0 +1,119 @@
|
|||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Linux/X11 minimalistic browser review
|
||||
````````````````````````````````
|
||||
This document covers my personal experiences and opinions of various minimalistic browsers. Sections of this document are likely to update and will be marked as such.
|
||||
|
||||
The current list of browsers and their last review times are:
|
||||
* Midori 0.5.9 - //2014-01-10//
|
||||
* NetSurf 3.0 - //2014-01-10//
|
||||
* xombrero 1.6.3 - //2014-01-10//
|
||||
* dwb 2013.03.30 - //2014-01-10//
|
||||
|
||||
As of 2014-01-10, I recommend **dwb** followed by xombrero.
|
||||
----
|
||||
My opinion(s) are influenced by the following:
|
||||
* Slackware, i3wm, and vim
|
||||
* minimalism for aesthetics __and__ resource usage
|
||||
* A liking of tabs
|
||||
* Good keyboard control
|
||||
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Midori 0.5.9
|
||||
````````````````````````
|
||||
[[img:pix/dox/shot_midori.png]](pix/dox/shot_midori.png).class(thumbnail)
|
||||
|
||||
**website:** [[midori-browser.org]](http://midori-browser.org)
|
||||
**requires:** GTK, webkitgtk, libunique, vala
|
||||
|
||||
Tab management is on the top, but a plugin allows for vertical tab management. Tab width is rather large, which is not nice.
|
||||
|
||||
Overall, very chunky, but pretty fast.
|
||||
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
NetSurf 3.0
|
||||
````````````````````````
|
||||
[[img:pix/dox/shot_netsurf.png]](pix/dox/shot_netsurf.png).class(thumbnail)
|
||||
|
||||
**website:** [[netsurf-browser.org]](http://netsurf-browser.org)
|
||||
**requires:** GTK
|
||||
|
||||
As advertised, NetSurf is a very fast graphical web browser. This speed is accomplished by using a custom layout and rendering engine. While this does indeed provide a fast browsing experience, it can also bring about strong visual differences when compared to other browsers.
|
||||
|
||||
Although JavaScript can be enabled from the preferences, I could not get JavaScript to actually work on any of the sites I frequently travel. From the main website, initial JavaScript support was stated as being worked on, but it seems to not be fully implemented. As such, the browsing experience will be limited on any sites using JavaScript enhancements.
|
||||
|
||||
Plugins do not seem to work, at least in my experience. Just as with JavaScript, there is an enable Plugins checkbox in the preferences, but it didn't seem to change anything.
|
||||
|
||||
Tab management is fairly simple, but is nice enough to allow you to position the tab listing on the top, bottom, left, or right positions of the browser. Given that I prefer side tab listings, this is a very nice feature. Sadly, no tab tree branching/parenting is supported.
|
||||
|
||||
Do Not Track options are there, so that is nice.
|
||||
|
||||
My final opinion is that is it a nice, extremely fast browser that, sadly, does not provide a modern browsing experience.
|
||||
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Xombrero 1.6.3
|
||||
````````````````````````
|
||||
[[img:pix/dox/shot_xombrero.png]](pix/dox/shot_xombrero.png).class(thumbnail)
|
||||
|
||||
**website:** [[opensource.conformal.com/wiki/xombrero]](https://opensource.conformal.com/wiki/xombrero)
|
||||
**requires:** GTK, libbsd, webkitgtk3
|
||||
|
||||
Xombrero is a minimalistic browser that prioritizes personal security, saves screenspace, and maintains support for both mouse and keyboard browsing.
|
||||
|
||||
Per default, xombrero functions by maintaining a website/domain whitelist for cookies, javascript, and plugins. This mode can be toggled.
|
||||
|
||||
Keyboard browsing is accomplished via keystrokes and commands. Commands are handled by opening the prompt with ":" and typing the wanted command.
|
||||
|
||||
JavaScript enhanced websites tended to be very problematic, as xombrero did not pass keystrokes to underlying JavaScript.
|
||||
|
||||
Sessions can be saved and recalled, however sessions are lost if the browser is closed unexpectedly. There may be a way to guard from this by using session autosaving, however I did not explore this.
|
||||
|
||||
Tabs can be visually shown at the top, although this can be disabled. Otherwise, tabs are managed via listing commands in the command prompt.
|
||||
|
||||
I experienced crashing on occasion after closing complex websites such as Twitter or YouTube.
|
||||
|
||||
Overall, I found it to be quite nice, and the optional mouse-friendly user interface is useful. If security tied to the browser is your thing, xombrero is definitely nice.
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
dwb 2013.03.30
|
||||
````````````````````````
|
||||
[[img:pix/dox/shot_dwb.png]](pix/dox/shot_dwb.png).class(thumbnail)
|
||||
|
||||
**website:** [[portix.bitbucket.org/dwb/]](http://portix.bitbucket.org/dwb/)
|
||||
**requires:** GTK, webkitgtk, json-c
|
||||
|
||||
dwb actually succeeds at being a truly keyboard-centric browser. Styled after vi/vim, dwb manages to achieve proper keyboard shortcuts by using an **insert** mode that allows keyboard input to pass to the browser unimpeded. Most other browsers I've used tend to choke on page-specific keyboard input and shortcut key conflicts, so kudos here. It must be noted that it took me a few days to get accustomed to switching to insert mode after tab-focus (clicking on text boxes autoswitches, btw), so expect accidental shortcut activation.
|
||||
|
||||
Following links using dwb is a breeze, as it uses an extremely nice **hints** system. Via separate keystrokes, one can create "follow" popups for "hints", links, and images, and even choose to open in the same tab, a new tab, or a new window. One __excellent__ feature is that standard link following triggers JavaScript onClick events, so JavaScript enhanced websites work amazingly.
|
||||
|
||||
Using the above hinting, links can by copied to the clipboard **or** the current primary selection. This is very nice, as I often use both.
|
||||
|
||||
Configuration is managed in-browser which is very nice.
|
||||
|
||||
Sessions can be saved and are automatically recovered if the browser is closed unexpectedly.
|
||||
|
||||
Click to enable flash that works with keyboard hinting!
|
||||
|
||||
A lot more stuff - very feature rich while being very slim.
|
||||
|
||||
Fav'd, quite heavily because I like vim.
|
||||
|
||||
Major problem. After running for 50 hours, consisting of heavy usage (youtube, twitter, etc.), it was using around 2 gigs of memory with only one blank tab open. There appears to be some meory leaks. CPU usage was nice and low, though.
|
||||
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
vimprobable2
|
||||
```````````````````````
|
||||
In short, I wish it was more like dwb.
|
||||
|
||||
Mode does not auto-switch to insert when tabbing to a text field - it seems to require a mouseclick.
|
||||
|
||||
tabs are opened as separate windows which I don't like.
|
||||
|
||||
Follow hinting/link is far less sleek - it's like xombrero's "number every link into the hundreds" method. Mouseclicks are emitted, so nice there.
|
||||
|
||||
Flash is played per default.
|
||||
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Conclusion
|
||||
````````````````````````
|
||||
**dwb** because it actually works as a minimalistic and modern keyboard-centric browser.
|
||||
|
||||
Second to that is **xombrero** because it works well enough.
|
13
front.ktx
13
front.ktx
|
@ -1,13 +0,0 @@
|
|||
,,,,,,,,,,,,,,,,
|
||||
Welcome .alt(I am here to serve).class(drop-shadow)
|
||||
````````````````
|
||||
I am [[kts]].alt(Ketchetwahmeegwun Southall) and welcome to **kettek**.
|
||||
|
||||
This website is the central hub for my:
|
||||
* **open source games**
|
||||
* **open source projects**
|
||||
* **technical documentation**
|
||||
* **testing lab**
|
||||
* **.plan files**
|
||||
|
||||
Embrace FOSS.
|
|
@ -84,6 +84,9 @@ if ($current_page == "plans") {
|
|||
<link rel="stylesheet" href="css/style.css">
|
||||
<link rel="stylesheet" href="css/style_pretty.css">
|
||||
<!--<script type="text/javascript" src="javascript/folder.js"></script>-->
|
||||
<script type="text/javascript" src="javascript/img2popup.js"></script>
|
||||
<script type="text/javascript" src="javascript/history.js"></script>
|
||||
<script type="text/javascript">window.onload = function() { img2popup.Go(); hist.Go(); };</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
/* This script implements HTML5 History states for clients that support it. It parses all links for those beginning in "?"(local), replaces with History-browsing functionality, and onclick updates the "content" div (and reparses accordingly). */
|
||||
var hist = {
|
||||
content: null,
|
||||
Go: function() {
|
||||
if (window.history.replaceState === undefined) return;
|
||||
this.content = document.getElementById("content");
|
||||
window.history.replaceState({content: this.content.innerHTML, url: window.location.href, title: document.title}, document.title, window.location.href);
|
||||
this.doParse();
|
||||
window.onpopstate = this.popState;
|
||||
},
|
||||
doParse: function(ele) {
|
||||
var l = (typeof ele === 'undefined' ? document.getElementsByTagName('A') : ele.getElementsByTagName('A'));
|
||||
for (var i = 0; i < l.length; i++) {
|
||||
if (!l[i].href) continue;
|
||||
if ((l[i].getAttribute("href")).charAt(0) != '?') continue;
|
||||
l[i].onclick = function() {
|
||||
hist.loadContent(this.getAttribute("href"));
|
||||
return false;
|
||||
};
|
||||
}
|
||||
img2popup.doParse(hist.content);
|
||||
},
|
||||
loadContent: function(target) {
|
||||
var r = new XMLHttpRequest();
|
||||
r.open("GET", "page.php"+target, true);
|
||||
r.onreadystatechange = (function(r, target) { return function() {
|
||||
switch (r.readyState) {
|
||||
case 4:
|
||||
hist.content.innerHTML = r.responseText;
|
||||
window.history.pushState({content: r.responseText, url: target, title: document.title}, target, target);
|
||||
hist.doParse(hist.content);
|
||||
break;
|
||||
}
|
||||
}})(r, target);
|
||||
r.send();
|
||||
},
|
||||
popState: function(e) {
|
||||
if (e.state == null) return;
|
||||
hist.content.innerHTML = e.state.content;
|
||||
document.title = e.state.title;
|
||||
hist.doParse(hist.content);
|
||||
}
|
||||
};
|
|
@ -0,0 +1,59 @@
|
|||
/* This script acquires all image tags encased in anchor tags that link to an image file then adds onclick events to popup + zoom the image rather than visiting the given link. */
|
||||
var img2popup = {
|
||||
popup: null,
|
||||
focused: false,
|
||||
Go: function(ele) {
|
||||
if (this.popup == null) this.doSetup();
|
||||
this.doParse();
|
||||
},
|
||||
doParse: function(ele) {
|
||||
var context = (typeof ele === 'undefined' ? document.getElementsByTagName("img") : ele.getElementsByTagName("img"));
|
||||
for (var i = 0; i < context.length; i++) {
|
||||
var p = context[i].parentNode;
|
||||
if (p.nodeName == "A") {
|
||||
if (p.href.match(/\.(png|jpg|jpeg)$/)) {
|
||||
p.onclick = (function(p) { return function(e) {
|
||||
if (!e) var e = window.event;
|
||||
e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation();
|
||||
img2popup.popup.src = p.href;
|
||||
return false;
|
||||
}})(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
doSetup: function() {
|
||||
this.popup = document.createElement("img");
|
||||
this.popup.style.visibility = "hidden";
|
||||
this.popup.id = "popup";
|
||||
this.popup.onload = function() {
|
||||
img2popup.doResize();
|
||||
this.style.visibility = "visible";
|
||||
img2popup.focused = true;
|
||||
};
|
||||
document.body.appendChild(this.popup);
|
||||
document.onclick = function() {
|
||||
if (img2popup.focused) img2popup.doHide();
|
||||
};
|
||||
window.onresize = img2popup.doResize;
|
||||
},
|
||||
doHide: function() {
|
||||
this.popup.style.visibility = "hidden";
|
||||
this.popup.src = "";
|
||||
this.focused = false;
|
||||
},
|
||||
doResize: function() {
|
||||
this.popup.style.width = this.popup.style.height = '';
|
||||
var w = this.popup.width;
|
||||
var h = this.popup.height;
|
||||
var r = Math.min(((window.innerWidth || document.documentElement.clientWidth)-32) / w, ((window.innerHeight || document.documentElement.clientHeight)-32) / h);
|
||||
if (r < 1.0) {
|
||||
w *= r;
|
||||
h *= r;
|
||||
}
|
||||
this.popup.style.marginLeft = -(w/2)+"px";
|
||||
this.popup.style.marginTop = -(h/2)+"px";
|
||||
this.popup.style.width = w+"px";
|
||||
this.popup.style.height = h+"px";
|
||||
}
|
||||
};
|
5
menu.ktx
5
menu.ktx
|
@ -2,8 +2,7 @@
|
|||
==== [[kettek]]
|
||||
((written things))
|
||||
* [[About kts]](?about).title(The Self)
|
||||
* [[Articles & Documents]](?dox).title(Substantial writings)
|
||||
* [[Technical Notes]](?notes).title(technical notes and how-tos)
|
||||
* [[Articles & Documents]](?dox).title(Insubstantial writings)
|
||||
* [[.plans]](?plans).title(Of Action)
|
||||
==== [[Games]]
|
||||
((open source gamus))
|
||||
|
@ -19,10 +18,8 @@
|
|||
* [[Utilities]](?utilities).title(older utilities)
|
||||
==== [[Lab]].title(less-than-complete things)
|
||||
((experiments that could level up))
|
||||
* [[procsicle]](?procsicle).title(PHP process linkage and terminal client)
|
||||
* [[noirchat]](?noirchat).title(decentralized chatting at its finest)
|
||||
* [[netwine]](?netwine).title(browser-based UDP/TCP/etc bridge)
|
||||
* [[mediaServe]](?mediaServe).title(PHP Multimedia Serving)
|
||||
|
||||
<a class="twitter-timeline" height="300" href="https://twitter.com/kts_kettek" data-chrome="transparent noborders" data-widget-id="538319352290746369">Tweets by @kts_kettek</a>
|
||||
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
````````````````````````
|
||||
After slogging through Ludum Dare 31, [[Petite Juliet]].href(?petite_juliet) has been created! Developed from scratch using C++, SDL2, OpenGL, and GLSL, it's kind of a cool little game.
|
||||
|
||||
[[img:pix/petite_juliet.png]]
|
||||
[[img:pix/petite_juliet.png]].style(width:50%).href(pix/petite_juliet.png)
|
||||
((27 out of 48 hours were blasted away in the creation of this game.))
|
||||
|
||||
I plan to expand it in the future, implementing some of the features that were (sadly) missed due to rushing about. See the TODO [[here]].rhef(?petite_juliet).
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
//2014-12-16// - Website Draft
|
||||
````````````````````````
|
||||
This here is a draft post.
|
|
@ -0,0 +1,4 @@
|
|||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
//2014-12-28// - ARK 1.0
|
||||
````````````````````````
|
||||
[[ARK/Alternative Registry Keeper]](?ARK) has been released!
|
|
@ -0,0 +1,9 @@
|
|||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
//2015-02-02// - MAngband 1.1.2 SDL2 interface
|
||||
````````````````````````````````
|
||||
I spent some time this last week hacking together an SDL2 interface for MAngband. I will be uploading the binaries for Windows 7, OS X, and Linux, along with the modified MAngband 1.1.2 source, once it is complete.
|
||||
|
||||
You can read some of my notes on hacking MAngband [[here]](?dox=mangband_hacking.html) - this should also provide enough information to make your own interface if you felt so inclined.
|
||||
|
||||
[[img:pix/shot_mangband.png]].style(width:75%).href(pix/shot_mangband.png)
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
//2015-03-21// - Website now live
|
||||
````````````````````````
|
||||
After some dilly-dallying, the new redesigned kettek is live.
|
||||
|
||||
All content is generated from kettext formatted files. If you are truly curious, see the git repo [[here]].href(http://kettek.net/gitphp/?p=kettek.git).
|
||||
|
||||
Some of the old content is not yet available, but will be moved/copied in over the coming weeks.
|
|
@ -0,0 +1,75 @@
|
|||
<?php
|
||||
$pages = [
|
||||
"proclib",
|
||||
"TODO",
|
||||
"kettext",
|
||||
"front",
|
||||
"plans",
|
||||
"news",
|
||||
"netwine",
|
||||
"dox",
|
||||
"cirquit",
|
||||
"petite_juliet",
|
||||
"VAD",
|
||||
"newsboy",
|
||||
"about",
|
||||
"utilities",
|
||||
"ARK",
|
||||
"noirchat"
|
||||
];
|
||||
$current_page = "news";
|
||||
foreach ($pages as $page) {
|
||||
foreach ($_GET as $get=>$value) {
|
||||
if ($get == $page) {
|
||||
$current_page = $page;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($current_page == "plans") {
|
||||
if ($_GET["plans"] == '') {
|
||||
$plans = scandir('plans/');
|
||||
for ($i = 2; $i < count($plans); $i++) {
|
||||
$post .= "<a href=?plans=".$plans[$i].">".$plans[$i]."</a><br />\n";
|
||||
}
|
||||
} else {
|
||||
$plans = scandir('plans/');
|
||||
for ($i = 2; $i < count($plans); $i++) {
|
||||
if ($plans[$i] == $_GET['plans']) break;
|
||||
}
|
||||
|
||||
$post .= "<h3>".$_GET['plans']."</h3>";
|
||||
$post .= "<center>";
|
||||
if ($i-1 >= 2) {
|
||||
$post .= '<a href="?plans='.$plans[$i-1].'" class="surf"><< '.$plans[$i-1].'</a>';
|
||||
}
|
||||
$post .= ' <a href="?plans" class="surf">index</a> ';
|
||||
if ($i+1 < count($plans)) {
|
||||
$post .= '<a href="?plans='.$plans[$i+1].'" class="surf">'.$plans[$i+1].' >></a>';
|
||||
}
|
||||
$post .= "</center>";
|
||||
$post .= "<pre>".htmlentities(file_get_contents("plans/".$_GET['plans']))."</pre>";
|
||||
}
|
||||
} else if ($current_page == "dox") {
|
||||
if ($_GET["dox"] == '') {
|
||||
$dox = scandir('dox/');
|
||||
for ($i = 2; $i < count($dox); $i++) {
|
||||
$post .= "<a href=?dox=".$dox[$i].">".$dox[$i]."</a><br />\n";
|
||||
}
|
||||
} else {
|
||||
$post .= '<a href="?dox" class="surf">Back to index</a><br />';
|
||||
$post .= (file_get_contents("dox/".$_GET['dox']));
|
||||
}
|
||||
} else if ($current_page == "news") {
|
||||
$news = scandir('news/');
|
||||
array_shift($news);
|
||||
array_shift($news);
|
||||
rsort($news);
|
||||
for ($i = 0; $i < count($news); $i++) {
|
||||
$post .= (file_get_contents("news/".$news[$i]));
|
||||
}
|
||||
}
|
||||
(file_exists('pages/'.$current_page.'.html') ? include 'pages/'.$current_page.'.html' : '');
|
||||
echo ($post ? $post : '');
|
||||
|
||||
?>
|
|
@ -1,7 +1,9 @@
|
|||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
ARK - Alternative Registry Keeper
|
||||
````````````````````````````````
|
||||
//Latest Version:// **1.0** (((2014-12-22))) / [[archive]].href(archive/ark) / [[git]].href(http://kettek.exoss.net/git/ARK)
|
||||
[[image:pix/shot_ARK.png]].class(thumbnail).href(pix/shot_ARK.png)
|
||||
|
||||
//Latest Version:// **1.0** (((2014-12-22))) / [[archive]].href(archive/ARK) / [[git]].href(http://kettek.net/gitphp/?p=ARK.git)
|
||||
|
||||
ARK is a fancy [[HTML5 & JavaScript enhanced]].title(The cool kids call it modern) directory index written in PHP. It is intended to be a sleek replacement for the standard Apache Directory Listings.
|
||||
|
||||
|
|
|
@ -3,12 +3,10 @@ VAD
|
|||
````````````````````````````````
|
||||
[[img:pix/icon_vad.gif]].width(64px).style(float:right;)
|
||||
|
||||
//Latest Version:// **0.2** (((2014-12-16))) / [[archive]].href(archives/VAD) / [[git]].href(http://kettek.exoss.net/git/VAD)
|
||||
//Latest Version:// **0.1** (((2014-12-16))) / [[archive]].href(archive/VAD)
|
||||
|
||||
* [[Linux 32-bit and 64-bit]].href(archives/VAD/latest_linux)
|
||||
* [[Mac OS X Universal (ppc/intel)]].href(archives/VAD/latest_macosx)
|
||||
* [[Windows 7 32-bit]].href(archives/VAD/latest_windows)
|
||||
* [[GPLv3 Source]].href(archives/VAD/latest_source)
|
||||
* [[Linux/Mac/Windows binary]].href(archive/VAD/latest_all)
|
||||
* [[GPLv3 Source]].href(archive/VAD/latest_source)
|
||||
|
||||
Deep in the underdark, the ancient beast awaited the arrival of some forlorn adventurer seeking the treasures of the forgotten gods. This traveler would need more than mere strength to defeat such a guardian -- wit and cunning would be the true deciders of fate...
|
||||
|
||||
|
@ -16,4 +14,6 @@ But with what means could such a feat become possible?
|
|||
|
||||
**Why, with VAD, of course!**
|
||||
|
||||
VAD is an engine for text-based, prose-centric adventures. It holds a modular design that allows for multiple front-ends, such as **curses** and **SDL**, along with back-ends that allow for different adventure formats, such as **VAD** and **ADV**.
|
||||
VAD is an engine for text-based, prose-centric adventures.
|
||||
|
||||
//COMING SOON//: version 0.2, with a modular design that allows for multiple front-ends, such as **curses** and **SDL**, along with back-ends that allow for different adventure formats, such as **VAD** and **ADV**.
|
||||
|
|
|
@ -4,17 +4,18 @@ About
|
|||
This website -- and all content unless otherwise noted -- was created by **kts / Ketchetwahmeegwun T. Southall**.
|
||||
|
||||
Feel free to contact me through any of these mediums:
|
||||
* **E-mail:** kettek1[[img:pix/at.gif]].style(float:none;).alt(@)exoss.net
|
||||
* **E-mail:** kettek1[[img:pix/at.gif]].style(float:none;).alt(@)kettek.net
|
||||
* **XMPP:** kts[[img:pix/at.gif]].style(float:none;).alt(@)wechat.exoss.net
|
||||
* **Twitter:** [[@kts_kettek]](https://twitter.com/kts_kettek/)
|
||||
|
||||
My GPG/PGP pubkey is available [[here]](pubkey.gpg)
|
||||
|
||||
----
|
||||
|
||||
This page is here so as to provide a more complete description of my person.
|
||||
|
||||
**I...**
|
||||
* am a Free software advocate
|
||||
* graduated in philosophy
|
||||
* care about learning, making cool stuff, having fun, and teaching others to do the same.
|
||||
|
||||
**I have...**
|
||||
|
@ -35,7 +36,6 @@ This page is here so as to provide a more complete description of my person.
|
|||
|
||||
**I have played with...**
|
||||
* [[Redundant ZFS clustering]](?dox=redundant_zfs_clustering)
|
||||
* IRC server management
|
||||
* IMAP email services
|
||||
* programming virtual machines and languages
|
||||
* 3d modeling and animating with Blender
|
||||
|
|
|
@ -3,14 +3,13 @@ CirQuit
|
|||
````````````````````````````````
|
||||
[[yt:https://www.youtube.com/watch?v=shlxBj0F02M]]
|
||||
|
||||
//Latest Version:// **1.0** (((2014-07-07))) / [[archive]].href(archives/cirquit) / [[git]].href(http://kettek.exoss.net/git/cirquit)
|
||||
* [[Stand-alone]].href(archives/VAD/latest)
|
||||
* [[GPLv3 Source]].href(archives/VAD/latest_source)
|
||||
**DOWNLOADS FORTHCOMING**
|
||||
//Latest Version:// **1.0** (((2014-07-07))) / [[archive]].href(archive/CirQuit)
|
||||
|
||||
CirQuit is a puzzle game that adheres to some NES limitations, such as sprite sizes, screen size, and controls. It was created for the NES-themed gamejam, #NESJAM and is written in JavaScript using [[CBDL]].href(?CBDL).
|
||||
<div style="width:100%;margin:auto;text-align:center;">
|
||||
Start: **Enter** | A: **X** | B: **Z** | DPad: **Arrow Keys**
|
||||
<iframe src="http://kettek.exoss.net/CirQuit/" style="float:none;width:320px;height:240px;"></iframe>
|
||||
<iframe src="http://kettek.net/CirQuit/" style="float:none;width:320px;height:240px;"></iframe>
|
||||
</div>
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
The Plot
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
.imply(header.ids)
|
||||
|
||||
//Latest Version:// **alpha source** (((2015-02-03))) / [[archive]].href(archive/kettext) / [[git]].href(http://kettek.net/gitphp/?p=kettext.git)
|
||||
|
||||
.include(../../kettext/documentation/kettext_define.ktx)
|
||||
|
||||
.include(../../kettext/documentation/kettext_history.ktx)
|
||||
|
||||
.include(../../kettext/documentation/kettext_formatting.ktx)
|
||||
|
||||
.include(../../kettext/documentation/kettext_rules.ktx)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
[?25l[J[J[J[J[J[J[?12l[?25h[?1049h[?1h=[1;25r[?12;25h[?12l[?25h[27m[m[H[2J[?25l[25;1H"VAD" [New File][2;1H[94m~ [3;1H~ [4;1H~ [5;1H~ [6;1H~ [7;1H~ [8;1H~ [9;1H~ [10;1H~ [11;1H~ [12;1H~ [13;1H~ [14;1H~ [15;1H~ [16;1H~ [17;1H~ [18;1H~ [19;1H~ [20;1H~ [21;1H~ [22;1H~ [23;1H~ [24;1H~ [1;1H[?12l[?25h[?25l[m[25;1H[1m-- VISUAL --[m[25;13H[K[1;1H[?12l[?25h[?25l[?12l[?25h[?25l[?12l[?25h[?25l[?12l[?25h[?25l[?12l[?25h[?25l[?12l[?25h[?25l[?12l[?25h[?25l[?12l[?25h[?25l[25;1H[K[1;1H[?12l[?25h[?25l[25;1HType :quit<Enter> to exit Vim[1;1H[?12l[?25h[25;1H[?1l>[?1049lVim: Caught deadly signal HUP
|
||||
Vim: Finished.
|
||||
[25;1H
|
|
@ -1,3 +1,4 @@
|
|||
DOWNLOAD FORTHCOMING.
|
||||
,,,,,,,,,,,,,,,,
|
||||
DESCRIPTION
|
||||
````````````````
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
Noirchat
|
||||
````````````````````````````````
|
||||
[[image:pix/shot_noirchat.png]].style(width:35%;float:right;).href(pix/shot_noirchat.png)
|
||||
//Latest Version:// [[git]].href(http://kettek.exoss.net/git/noirchat)
|
||||
//Latest Version:// [[git]].href(http://kettek.net/gitphp/?p=noirchat.git)
|
||||
|
||||
This program is an incomplete project that is intended to provide fully decentralized encrypted instant messaging. The intended network is either local networks or VPNs.
|
||||
|
||||
|
|
|
@ -3,11 +3,11 @@ Petite Juliet
|
|||
````````````````````````````````
|
||||
[[image:pix/petite_juliet.png]].style(width:50%;float:right;).href(pix/petite_juliet.png)
|
||||
|
||||
//Latest Version:// **1.0** (((2014-12-11))) / [[archive]].href(archives/petite_juliet) / [[git]].href(http://kettek.exoss.net/git/juliet)
|
||||
* [[Linux 32-bit and 64-bit]].href(archives/petite_juliet/latest_linux)
|
||||
* [[Mac OS X Universal (powerpc/intel)]].href(archives/petite_juliet/latest_macosx)
|
||||
* [[Windows 7 32-bit]].href(archives/petite_juliet/latest_windows)
|
||||
* [[GPLv3 Source]].href(archives/petite_juliet/latest_source)
|
||||
//Latest Version:// **1.0** (((2014-12-11))) / [[archive]].href(archive/Petite_Juliet) / [[git]].href(http://kettek.net/gitphp/?p=juliet.git)
|
||||
* [[Linux 32-bit and 64-bit]].href(archive/Petite_Juliet/latest_linux)
|
||||
* [[Mac OS X Universal (powerpc/intel)]].href(archive/Petite_Juliet/latest_macosx)
|
||||
* [[Windows 7 32-bit]].href(archive/Petite_Juliet/latest_windows)
|
||||
* [[GPLv3 Source]].href(archive/Petite_Juliet/latest_source)
|
||||
|
||||
Petite Juliet is a single-screen brawling game featuring stylized pixel art. It was originally written for the 48-hour Ludum Dare 31 Compo.
|
||||
|
||||
|
@ -21,3 +21,18 @@ Petite Juliet is a single-screen brawling game featuring stylized pixel art. It
|
|||
|
||||
----
|
||||
The source code is available under the GPLv3. Feel free to modify, inspect, critizice, or burn it.
|
||||
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
TODO
|
||||
````````````````````````
|
||||
* 1. Framebuffer coloring layer - additive layer that is placed over terrain, "staining" the terrain layer with special fx(blood, etc.)
|
||||
* 2. Throwing of entities
|
||||
* 3. Multiplayer
|
||||
* 4. Stage and wave system.
|
||||
* Each stage is a separate color, and is shown as a separate FBO in the background. When the current stage ends, it zooms into the new stage.
|
||||
* 5. Fun special effects for hittin' stuff
|
||||
* 6. More enemy types!
|
||||
* Bosses as well
|
||||
* 7. Blocking and countering
|
||||
* 8. Items (parasol)
|
||||
* 9. More and better sound effects. Music too.
|
||||
|
|
|
@ -3,11 +3,9 @@ Proclib
|
|||
````````````````````````
|
||||
[[yt:aMp9nZ57gqI]]
|
||||
|
||||
//Latest Version:// **1.0** (((2014-12-11))) / [[archive]].href(archives/proclib) / [[git]].href(http://kettek.exoss.net/git/proclib)
|
||||
* [[Linux 32-bit and 64-bit]].href(archives/proclib/latest_linux)
|
||||
* [[Mac OS X Universal (powerpc/intel)]].href(archives/proclib/latest_macosx)
|
||||
* [[Windows 7 32-bit]].href(archives/proclib/latest_windows)
|
||||
* [[GPLv3 Source]].href(archives/proclib/latest_source)
|
||||
//Latest Version:// **0.1** (((2014-12-11))) / [[archive]].href(archive/proclib) / [[git]].href(http://kettek.net/gitphp/?p=proclib.git)
|
||||
* [[Linux/Mac/Windows binary]].href(archive/proclib/proclib_0.1_all.zip)
|
||||
* [[GPLv3 Source]].href(archive/proclib/proclib_0.1.tgz)
|
||||
|
||||
What is proclib? Simply, a library and syntax language for cell-based map generation.
|
||||
|
||||
|
|
|
@ -3,5 +3,7 @@ Utilities
|
|||
````````````````````````````````
|
||||
This page contains various smaller utilities I've written over the years. These are much smaller in scope than other projects and many of them suffer from less-than-perfect coding practices.
|
||||
|
||||
All downloads are currently unorganized and available [[here]].href(archive/utilities).
|
||||
|
||||
.include(utilities/OSX.ktx)
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
,,,,,,,,,,,,,,,,
|
||||
EBIC - Excellent Batch Image Converter
|
||||
````````````````
|
||||
[[img:pix/utilities/shot_ebic.png]].class(thumbnail)
|
||||
[[img:pix/utilities/shot_ebic.png]].class(thumbnail).href(pix/utilities/shot_ebic.png)
|
||||
EBIC, or Excellent Batch Image Converter, is an AppleScript frontend to the sips program for converting/resizing large batches of images. It has been released under the GPLv3, although the code is certainly less than ideal.
|
||||
|
||||
EBIC was created for fulfilling a need that seemed to be lacking in most available solutions for a minimalistic batch image converter for OS X, at least at the time I created it (2011/02/15). The UI is a bit more obtruse than I would like it to be, however it should be fairly forthcoming as to what does what.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
,,,,,,,,,,,,,,,,
|
||||
EPPPD
|
||||
````````````````
|
||||
[[img:pix/utilities/shot_epppd.png]].class(thumbnail)
|
||||
[[img:pix/utilities/shot_epppd.png]].class(thumbnail).href(pix/utilities/shot_epppd.png)
|
||||
EPPPD is a fairly simple GPLv3'd AppleScript frontend to the pppd program. Given the background of the author (me!), common *nix methods are used to acquire the most-likely subnet, tty device, and DNS (aka, ls /dev/tty*, parsing those values, etc.). At the moment, it is fairly limited in its capabilities, but should be more than enough for the purpose of running a pppd server to a mobile/palm client, as was its original purpose. Additionally, the code is pretty nasty, but for the sake of FS/OSS I have made it available.
|
||||
|
||||
**Features**
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 53 KiB |
Binary file not shown.
After Width: | Height: | Size: 53 KiB |
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
Binary file not shown.
After Width: | Height: | Size: 51 KiB |
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
Binary file not shown.
After Width: | Height: | Size: 42 KiB |
|
@ -1,5 +0,0 @@
|
|||
.imply(version.none)
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
[[plans]].href(?plans)
|
||||
````````````````````````
|
||||
These plan files general contain information pertaining to what I'm working on at some given moment. Expect obtuse jargon without reference.
|
637
proclib.ktx
637
proclib.ktx
|
@ -1,637 +0,0 @@
|
|||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Preface
|
||||
````````````````````````
|
||||
What is proclib? Simply, a library and syntax language for cell-based map generation.
|
||||
|
||||
However, it is much more than that -- it is a C library that allows for the creation of randomized and complex maps filled with a plethora of user-defined structures.
|
||||
|
||||
Structures can be thought of as complex collections of entities/cells. From this, structures can be made up of other structures to increase the variation and complexity needed for a structure. Examples of structures are: castles, moats, ravines, towns, rooms, and much more.
|
||||
|
||||
An example of structure definition syntax is:
|
||||
|
||||
#circle {
|
||||
# flags CIRCLE
|
||||
# x 1~3
|
||||
# y 1~3
|
||||
# size_x 4~8
|
||||
# size_y 4~8
|
||||
# id_1 1
|
||||
#}
|
||||
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Syntax
|
||||
````````````````````````
|
||||
proclib structure definitions are written in plain text files with **very** simple formatting rules. A structures file can contain an ultimately unlimited amount of structures within it, and each structure can have various configurations applied that alter its generation behaviors.
|
||||
|
||||
,,,,,,,,,,,,,,,,
|
||||
Basic Syntax
|
||||
````````````````
|
||||
Each structure is contained with a structure definition block such as:
|
||||
|
||||
#my_structure {
|
||||
# x 1
|
||||
# y 1
|
||||
#}
|
||||
|
||||
Within a structure definition block, the following variables can be set:
|
||||
|
||||
* **flags** -- defines the generation behavior using bitflags. Multiple flags can be set by piping them together (ex. "flags CIRCLE|BORDER|ORIGIN")
|
||||
* Shape Generation
|
||||
* //CIRCLE// - Bresenham-like ellipse generation
|
||||
* //RECT// - basic "box" generation
|
||||
* Shape Modification
|
||||
* //BORDER// - creates an interior border using the current shape
|
||||
* //IGNORE_EMPTY// - ignores cells that are empty (i.e., have no id_s written to them)
|
||||
* Structure Placement
|
||||
* //ORIGIN// - places the structure from its center
|
||||
* //OVERLAP// - overlaps the structure on top of other potential structures
|
||||
* **size_x, size_y** -- defines the size of the structure. Values may be:
|
||||
* single numbers (e.g., "4")
|
||||
* percentages (e.g., "50%" of parent's size)
|
||||
* ranges of either (e.g., "25%~50%").
|
||||
* If omitted, defaults to 0, 0
|
||||
* **x, y** -- defines the position of the structure. Values may be:
|
||||
* single numbers (e.g., "-4", "4")
|
||||
* percentages (e.g., "-50%", "50%")
|
||||
* ranges of either (e.g., "-50%~50%").
|
||||
* If omitted, defaults to 0, 0
|
||||
* **id_1** -- first id of the structure. Values may be:
|
||||
* single numbers (e.g., "2")
|
||||
* ranges (e.g., "1~4")
|
||||
* comma-delimited sets of either (e.g., "2, 1~4")
|
||||
* **id_2** -- second id of the structure. Follows same rules as id_1
|
||||
|
||||
Before delving into more complicated aspects of structure definitions, let us use some of the above information to create a simple structure.
|
||||
|
||||
,,,,,,,,,,,,
|
||||
A Simple Circle
|
||||
````````````
|
||||
A rudimentary example that creates a variable-sized tower in the middle of the screen would be:
|
||||
|
||||
tower {
|
||||
flags CIRCLE
|
||||
size_x 12~16
|
||||
size_y 9~14
|
||||
id_1 0
|
||||
}
|
||||
|
||||
This would generate structures similar to the following:
|
||||
|
||||
........................................
|
||||
....................0...................
|
||||
.................0000000................
|
||||
................000000000...............
|
||||
...............00000000000..............
|
||||
...............00000000000..............
|
||||
..............0000000000000.............
|
||||
...............00000000000..............
|
||||
...............00000000000..............
|
||||
................000000000...............
|
||||
.................0000000................
|
||||
....................0...................
|
||||
........................................
|
||||
|
||||
,,,,,,,,,,,,,,,,
|
||||
Complex Syntax: Relations
|
||||
````````````````
|
||||
Every structure can have 3 additional sets of information. The first I will cover is **relations**. A relation is, as the name implies, a relationship to another structure. In general, relations are used to create sub-structures within a structure.
|
||||
|
||||
**Relations** are contained with a relations block, and each relation is defined in a similar method as a regular structure. Acceptable settings are:
|
||||
|
||||
* **flags** -- same as structure flags, but override and/or stack on top of the given structure's flags
|
||||
* **x, y** -- override position settings
|
||||
* **count** -- defines how many times to generate this relation. Values may be:
|
||||
* single numbers (e.g., "2")
|
||||
* ranges (e.g., "2~6").
|
||||
* If omitted, defaults to 1.
|
||||
|
||||
Using this new information, let us expand upon the earlier tower.
|
||||
|
||||
,,,,,,,,,,,,
|
||||
A Simple Tower
|
||||
````````````
|
||||
An ellipse by itself is rather boring, but we can spice things up by using relations to create walls:
|
||||
tower {
|
||||
flags CIRCLE
|
||||
size_x 12~16
|
||||
size_y 9~14
|
||||
id_1 0
|
||||
relations {
|
||||
tower_walls {
|
||||
flags CIRCLE|OVERLAP
|
||||
}
|
||||
}
|
||||
}
|
||||
tower_walls {
|
||||
flags BORDER
|
||||
size_x 100%
|
||||
size_y 100%
|
||||
id_1 1
|
||||
}
|
||||
|
||||
This would generate a structure similar to the following:
|
||||
........................................
|
||||
...................1....................
|
||||
................1111111.................
|
||||
..............11100000111...............
|
||||
..............10000000001...............
|
||||
.............1100000000011..............
|
||||
..............10000000001...............
|
||||
..............11100000111...............
|
||||
................1111111.................
|
||||
...................1....................
|
||||
........................................
|
||||
|
||||
,,,,,,,,,,,,,,,,
|
||||
Complex Syntax: Replace
|
||||
````````````````
|
||||
With the concept of relations out of the way, we can move into the **replace** functionality.
|
||||
|
||||
**Replace** rules are contained in a replace block and define what type of **id_1** and **id_2** tiles may be replaced. The possible values in a replace block are:
|
||||
|
||||
* **id_1** -- list of primary IDs that may be replaced. Values may be:
|
||||
* single positive numbers (e.g., "4")
|
||||
* positive ranges (e.g., "1~4")
|
||||
* comma-delimited sets of either (e.g., "1, 3~8, 12)
|
||||
* **id_2** -- list of secondary IDs that may be replaced. Values may be the same as id_1.
|
||||
|
||||
For this example, we're going to use another structure to remove a section of walls from the tower.
|
||||
|
||||
,,,,,,,,,,,,
|
||||
Holy Tower
|
||||
````````````
|
||||
tower {
|
||||
flags CIRCLE
|
||||
size_x 12~16
|
||||
size_y 9~14
|
||||
id_1 0
|
||||
relations {
|
||||
tower_walls {
|
||||
flags CIRCLE|BORDER|OVERLAP
|
||||
}
|
||||
hole {
|
||||
x 50%
|
||||
y 50%
|
||||
}
|
||||
}
|
||||
}
|
||||
tower_walls {
|
||||
flags BORDER
|
||||
size_x 100%
|
||||
size_y 100%
|
||||
id_1 1
|
||||
}
|
||||
hole {
|
||||
flags RECT|IGNORE_EMPTY
|
||||
size_x 100%
|
||||
id_1 0
|
||||
replace {
|
||||
id_1 1
|
||||
}
|
||||
}
|
||||
|
||||
What we've done here is create a new "hole" structure that replaces any overlapping cell with an id_1 of "1" with "0". We've added this structure as a relation to the tower so that it is applied appropriately. The IGNORE_EMPTY flag is only used to prevent the replacement of empty (unset) tiles.
|
||||
|
||||
The resulting replacement would generate something similar to:
|
||||
........................................
|
||||
...................1....................
|
||||
................1111111.................
|
||||
..............11100000111...............
|
||||
..............10000000001...............
|
||||
.............1100000000000..............
|
||||
..............10000000000...............
|
||||
..............11100000000...............
|
||||
................1111000.................
|
||||
...................1....................
|
||||
........................................
|
||||
|
||||
,,,,,,,,,,,,,,,,
|
||||
Complex Syntax: Paths
|
||||
````````````````
|
||||
The (currently!) final important structure generating concept is that of **paths**. The first key concept is to realize that paths are generated in a separate pass from initial structures. During structure generation, structures are built and then recorded as "live structures". After this, these live structures are checked for any pathing configuration, and if found, a pathing pass is made. The pathing pass itself generates new live structures for every path "step" made (kept separately from the previous!) and handles the building as per normal operations.
|
||||
|
||||
A **path** is a configuration within a structure that defines some form of pathing behavior. This includes from/to destination structures, position offsets, structure to use for pathing, pathing algorithm, and others. Acceptable settings for a path are:
|
||||
|
||||
* **flags** -- these define the behaviors of the pathing
|
||||
* Algorithms/Movement
|
||||
* //DUMB// -- doggedly move towards "to" by incrementing or decrementing x and y position. Is stopped by cells that cannot be replaced and are not empty.
|
||||
* //A*// -- uses A* to intelligently move towards position (NOT IMPLEMENTED (YET!))
|
||||
* //WALK// -- only move one cell in one direction at a time (e.g., x+1 OR y+1, not both)
|
||||
* //WANDER// -- some odd chance to randomly move x or y in a direction. Requires an Algorithm.
|
||||
* Looping
|
||||
* //ALL// -- attempt to path find to all targets that match the to pathing syntax
|
||||
* Etc.
|
||||
* //FORCE// -- if pathing movement fails too many times(>32), force movement anyway
|
||||
* //UNIQUE// -- only look for from/to targets that have not been pathed to/from by this structure
|
||||
* **to** -- pathing syntax for the structure to path to - REQUIRED
|
||||
* **to_flags** -- flags that define a specific "to" behavior
|
||||
* //ORIGIN// -- you guessed it, to_x/to_y values are relative to the center of the target
|
||||
* **to_x, to_y** -- position to path to. Values may be:
|
||||
* single numbers (e.g., "1", "-1")
|
||||
* percentages (e.g., "25%")
|
||||
* ranges (e.g., "-25%~25%", "-5~5")
|
||||
* sets of any (e.g., "1, 25%, -5~5")
|
||||
* **from** -- pathing syntax for the structure to path from. If omitted, defaults to the structure making this path.
|
||||
* **from_flags** -- same as to_flags
|
||||
* **from_x, from_y** -- same as to_x, to_y
|
||||
* **x, y** -- positional data that is applied to each pathing step. Values may be:
|
||||
* single numbers (e.g., "-1")
|
||||
* ranges (e.g., "-1~1")
|
||||
* sets of either (e.g., "-1, -1~1")
|
||||
|
||||
,,,,,,,,,,,,
|
||||
Pathing Syntax
|
||||
````````````
|
||||
Pathing syntax, used for **to** and **from** in pathing, refers to live structures and uses a straight-forward syntax contained in a single string. An example pathing syntax string could be: ":tower:hole" The following are the single-character "commands" used to acquire a live structure.
|
||||
|
||||
* **:** -- if the first character of the string, get the global "root" live structure
|
||||
* **:** -- otherwise it is used a position delimiter to specify parent->child
|
||||
* **^** -- get parent of this context's live structure
|
||||
|
||||
These can be combined to acquire live structures in complex structures. Examples:
|
||||
|
||||
* "tower" -- look for a structure named "tower" in the current context.
|
||||
* ":tower" -- look for a structure named "tower" in the root context.
|
||||
* "^tower" -- look for a structure named "tower" in the parent of the current context.
|
||||
* "^^towers:tower:room" -- look for a structure named "room" in "tower" in "towers" in the parent of the parent of the current context.
|
||||
|
||||
Context is assumed to be the live structure containing the path definitions.
|
||||
Let us use this new-found knowledge to create a road between the towers of two rival wizards.
|
||||
,,,,,,,,,,,,
|
||||
The Two Towers
|
||||
````````````
|
||||
This example expands on the preceding example by creating a wall-removing path between two towers.
|
||||
tower {
|
||||
flags CIRCLE
|
||||
size_x 8~12
|
||||
size_y 7~10
|
||||
id_1 0
|
||||
relations {
|
||||
tower_walls {
|
||||
flags CIRCLE|OVERLAP
|
||||
}
|
||||
}
|
||||
}
|
||||
tower_walls {
|
||||
flags BORDER
|
||||
size_x 100%
|
||||
size_y 100%
|
||||
id_1 1
|
||||
}
|
||||
dirt_path {
|
||||
flags RECT
|
||||
size_x 1
|
||||
size_y 1
|
||||
id_1 0
|
||||
replace {
|
||||
id_1 1
|
||||
}
|
||||
}
|
||||
towers {
|
||||
size_x 100%
|
||||
size_y 100%
|
||||
relations {
|
||||
tower {
|
||||
count 2
|
||||
x 10~75%
|
||||
y 10~75%
|
||||
}
|
||||
}
|
||||
paths {
|
||||
dirt_path {
|
||||
flags DUMB|WALK
|
||||
to tower
|
||||
to_flags ORIGIN
|
||||
from tower
|
||||
from_flags ORIGIN
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
This would create a scene similar to:
|
||||
...............1........................
|
||||
............1111111.....................
|
||||
...........110000011....................
|
||||
..........11000000011...................
|
||||
...........110000011.......1............
|
||||
............1111100.....1111111.........
|
||||
...............1..00...110000011........
|
||||
...................00..100000001........
|
||||
....................0011000000011.......
|
||||
.....................00000000001........
|
||||
.......................110000011........
|
||||
........................1111111.........
|
||||
...........................1............
|
||||
|
||||
This should give a fairly concise overview of proclib, although there are likely to be massive enhancements and changes in the future. :)
|
||||
,,,,,,,,,,,,,,,,
|
||||
Other Examples
|
||||
````````````````
|
||||
,,,,,,,,,,,,
|
||||
Little House by the Lake
|
||||
````````````
|
||||
................................................................
|
||||
.........8.......8.........8.8.........88......8.8..............
|
||||
......11111111111.........8....8........................8.......
|
||||
......10000000001.........8....8................................
|
||||
.....8100000000018.8........................8....8..............
|
||||
......11111111111.............8.8...........8...............8...
|
||||
.......................8........................................
|
||||
......8.......8...........................8.....8...........8..8
|
||||
............................................8...................
|
||||
..8........................8......8.........................8...
|
||||
...8..8....8.......8....8........8..............................
|
||||
........................................8..............8........
|
||||
.......8.....................8....8......................8......
|
||||
..........8..8.........88........................8...8...8..8...
|
||||
......8...............8..8.......8.................8.....0....8.
|
||||
......88...............8.................8..........000000000000
|
||||
...8.............8...............................000000000000000
|
||||
..8....8...............88.......................0000000000000000
|
||||
............................8.................000000000000000000
|
||||
....8..................8......8.........8....0000000000000000000
|
||||
........8..............8....................00000000000000000000
|
||||
...................................8.......000000000000000000000
|
||||
.....8..........8...8.........8............000000000000000000000
|
||||
|
||||
--------
|
||||
|
||||
tree {
|
||||
flags RECT
|
||||
size_x 1
|
||||
id_1 8
|
||||
}
|
||||
lake {
|
||||
flags CIRCLE|OVERLAP
|
||||
size_x 50~75%
|
||||
id_1 0
|
||||
}
|
||||
house {
|
||||
flags RECT
|
||||
size_x 9~14
|
||||
size_y 4~7
|
||||
id_1 0
|
||||
relations {
|
||||
house_walls {
|
||||
flags RECT
|
||||
}
|
||||
}
|
||||
}
|
||||
house_walls {
|
||||
flags BORDER|OVERLAP
|
||||
size_x 100%
|
||||
size_y 100%
|
||||
id_1 1
|
||||
}
|
||||
start {
|
||||
size_x 64
|
||||
size_y 32
|
||||
relations {
|
||||
lake {
|
||||
count 4~6
|
||||
x 50~80%
|
||||
y 70~80%
|
||||
}
|
||||
tree {
|
||||
count 64~128
|
||||
x 0~100%
|
||||
y 0~100%
|
||||
}
|
||||
house {
|
||||
flags OVERLAP
|
||||
count 1
|
||||
x 10~50%
|
||||
y 10~50%
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
,,,,,,,,,,,,
|
||||
Lumpy Castle
|
||||
````````````
|
||||
The structure definition for this one is exceptionally bad and could be refactored.
|
||||
|
||||
.................................................................
|
||||
............................................................9....
|
||||
...9.......1.........................9........1..................
|
||||
........1111111............................1111111...............
|
||||
.......110000011..........................1100000119.............
|
||||
.......100000001..........................100000001..............
|
||||
.......100000001.....................9....100000001......9.......
|
||||
......1100000001111111111111111111111111111000000011.............
|
||||
.......100000000000000000000000000000000000000000001.............
|
||||
.......100000000000000000000000000000000000000000001.............
|
||||
.......110000001111111111111111111111111111100000011....9........
|
||||
........11000011...........9...............11000011..............
|
||||
.........100001.............................100001...............
|
||||
.........100001..............1......9.......100001...............
|
||||
.........100001...........1111111...........100001...............
|
||||
.........100001...9......110000011..........100001...............
|
||||
.........100001..........100000001..........100001...............
|
||||
.........100001........9.100000001..........100001..............9
|
||||
.........100001.........11000000011.........100001...............
|
||||
.........100001..........100000001..........100001...............
|
||||
.........100001..........100000001..........100001...............
|
||||
.9.......100001..........110000011..........100001...............
|
||||
.........100001...........1111111...........100001...............
|
||||
.........100001.....9........1..............100001...............
|
||||
........1100001............................1100001...............
|
||||
.......110000011..........................110000011..............
|
||||
.......100000001..........................100000001..............
|
||||
.......100000001..........................100000001....8.........
|
||||
......1100000001111111111111111111111111111000000011.88888.......
|
||||
.......10000000000000000000000000000000000000000001..88888.......
|
||||
.9.....10000000000000000000000000000000000000000001.8888888......
|
||||
.......11000001111111111111111111111111111110000011..88888.......
|
||||
........1111111............................1111111...88888.......
|
||||
...........1.................................81........8.........
|
||||
...........................................88888.................
|
||||
.............................9.............88888.............9...
|
||||
..........................................8888888................
|
||||
...........................................88888.................
|
||||
...........................................88888.................
|
||||
.............................................8...................
|
||||
.................9........9.......9..............................
|
||||
|
||||
--------
|
||||
|
||||
lake {
|
||||
flags CIRCLE|ORIGIN
|
||||
size_x 6~9
|
||||
id_1 8
|
||||
}
|
||||
tree {
|
||||
flags RECT|ORIGIN
|
||||
size_x 1
|
||||
id_1 9
|
||||
replace {
|
||||
id_1 9
|
||||
}
|
||||
}
|
||||
tower_1 {
|
||||
flags CIRCLE|ORIGIN
|
||||
size_x 20%
|
||||
id_1 0
|
||||
relations {
|
||||
tower_walls {
|
||||
flags OVERLAP
|
||||
}
|
||||
}
|
||||
}
|
||||
tower_2 {
|
||||
flags CIRCLE|ORIGIN
|
||||
size_x 20%
|
||||
id_1 0
|
||||
relations {
|
||||
tower_walls {
|
||||
flags OVERLAP
|
||||
}
|
||||
}
|
||||
}
|
||||
tower_3 {
|
||||
flags CIRCLE|ORIGIN
|
||||
size_x 20%
|
||||
id_1 0
|
||||
relations {
|
||||
tower_walls {
|
||||
flags OVERLAP
|
||||
}
|
||||
}
|
||||
}
|
||||
tower_4 {
|
||||
flags CIRCLE|ORIGIN
|
||||
size_x 20%
|
||||
id_1 0
|
||||
relations {
|
||||
tower_walls {
|
||||
flags OVERLAP
|
||||
}
|
||||
}
|
||||
}
|
||||
tower_5 {
|
||||
flags CIRCLE|ORIGIN
|
||||
size_x 20%
|
||||
id_1 0
|
||||
relations {
|
||||
tower_walls {
|
||||
flags OVERLAP
|
||||
}
|
||||
}
|
||||
}
|
||||
tower_walls {
|
||||
flags CIRCLE|BORDER
|
||||
size_x 100%
|
||||
size_y 100%
|
||||
id_1 1
|
||||
}
|
||||
long_walls {
|
||||
size_x 10%
|
||||
size_y 10%
|
||||
flags RECT|ORIGIN
|
||||
id_1 0
|
||||
replace {
|
||||
id_1 1
|
||||
}
|
||||
relations {
|
||||
long_walls_walls {
|
||||
}
|
||||
}
|
||||
}
|
||||
long_walls_walls {
|
||||
flags RECT|BORDER|ORIGIN|OVERLAP
|
||||
size_x 100%
|
||||
size_y 100%
|
||||
id_1 1
|
||||
replace {
|
||||
id_1 0
|
||||
}
|
||||
}
|
||||
castle {
|
||||
size_x 90%
|
||||
size_y 90%
|
||||
relations {
|
||||
tower_1 {
|
||||
x 20%
|
||||
y 20%
|
||||
}
|
||||
tower_2 {
|
||||
x 20%
|
||||
y 80%
|
||||
}
|
||||
tower_3 {
|
||||
x 80%
|
||||
y 20%
|
||||
}
|
||||
tower_4 {
|
||||
x 80%
|
||||
y 80%
|
||||
}
|
||||
tower_5 {
|
||||
flags ORIGIN
|
||||
x 50%
|
||||
y 50%
|
||||
}
|
||||
}
|
||||
paths {
|
||||
long_walls {
|
||||
flags DUMB|WALK|FORCE
|
||||
from tower_1
|
||||
from_flags ORIGIN
|
||||
to tower_2
|
||||
to_flags ORIGIN
|
||||
to_x -25%
|
||||
}
|
||||
long_walls {
|
||||
flags DUMB|WALK|FORCE
|
||||
from_flags ORIGIN
|
||||
from_x 0%
|
||||
from_y 0%
|
||||
to_flags ORIGIN
|
||||
to_x 0%
|
||||
to_y 0%
|
||||
from tower_1
|
||||
to tower_3
|
||||
}
|
||||
long_walls {
|
||||
flags DUMB|WALK|FORCE
|
||||
from_flags ORIGIN
|
||||
from_x 0%
|
||||
from_y 0%
|
||||
to_flags ORIGIN
|
||||
to_x -25%
|
||||
to_y 0%
|
||||
from tower_3
|
||||
to tower_4
|
||||
}
|
||||
long_walls {
|
||||
flags DUMB|WALK|FORCE
|
||||
from_flags ORIGIN
|
||||
from_x 0%
|
||||
from_y 0%
|
||||
to_flags ORIGIN
|
||||
to_x 0%
|
||||
to_y 0%
|
||||
from tower_4
|
||||
to tower_2
|
||||
}
|
||||
}
|
||||
}
|
||||
start {
|
||||
size_x 64~80
|
||||
size_y 32~48
|
||||
relations {
|
||||
castle {
|
||||
}
|
||||
tree {
|
||||
count 16~32
|
||||
x 0~100%
|
||||
y 0~100%
|
||||
}
|
||||
lake {
|
||||
count 1~2
|
||||
x 70~100%
|
||||
y 70~100%
|
||||
}
|
||||
}
|
||||
}
|
||||
.imply(header.ids)
|
|
@ -0,0 +1,65 @@
|
|||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
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
|
||||
sxB82jaIVmZB1wZrTG1w704c4xyaNJQ=
|
||||
=JHLx
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
66
style.css
66
style.css
|
@ -1,66 +0,0 @@
|
|||
/* */
|
||||
body {
|
||||
background-color: #000;
|
||||
}
|
||||
/* general helper classes */
|
||||
.min {
|
||||
margin: 0 auto;
|
||||
float: right;
|
||||
width: 1000px;
|
||||
}
|
||||
.padder {
|
||||
padding: 1em;
|
||||
margin: 0;
|
||||
}
|
||||
/* header styling */
|
||||
#header {
|
||||
float: left;
|
||||
min-width: 100%;
|
||||
height: 200px;
|
||||
background-color: #FFF;
|
||||
text-align: center;
|
||||
color: #DFDFDF;
|
||||
font-size: 24pt;
|
||||
line-height: 100%;
|
||||
}
|
||||
/* content styling */
|
||||
#container {
|
||||
padding: 15px 0;
|
||||
clear: both;
|
||||
text-align: left;
|
||||
}
|
||||
/* */
|
||||
#menu {
|
||||
position: relative;
|
||||
width: 30%;
|
||||
min-height: 70%;
|
||||
float: right;
|
||||
background-color: #000;
|
||||
color: #DFDFDF;
|
||||
text-align: right;
|
||||
font-size: 16pt;
|
||||
line-height: 150%;
|
||||
}
|
||||
/* */
|
||||
#content {
|
||||
position: relative;
|
||||
float: left;
|
||||
width: 70%;
|
||||
min-height: 70%;
|
||||
background-color: #FFF;
|
||||
color: #DFDFDF;
|
||||
font-size: 12pt;
|
||||
line-height: 125%;
|
||||
}
|
||||
#content h1 {
|
||||
width: 100%;
|
||||
padding: 0.5em;
|
||||
border-bottom: 2px solid #555;
|
||||
color: #000;
|
||||
background-color: #555;
|
||||
}
|
||||
#content p, ul {
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
.shadow_inset {
|
||||
-webkit-box-shadow:0 1px 4px rgba(0, 0, 0, 0.8), 0 0 40px rgba(0, 0, 0, 0.4) inset;
|
||||
-moz-box-shadow:0 1px 4px rgba(0, 0, 0, 0.8), 0 0 40px rgba(0, 0, 0, 0.4) inset;
|
||||
box-shadow:0 1px 4px rgba(0, 0, 0, 0.8), 0 0 40px rgba(0, 0, 0, 0.4) inset;
|
||||
}
|
||||
.shadow_inset:before,
|
||||
.shadow_inset:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
z-index: -2;
|
||||
bottom:15px;
|
||||
left:10px;
|
||||
width:50%;
|
||||
height:20%;
|
||||
-webkit-box-shadow:0 15px 10px rgba(0, 0, 0, 0.7);
|
||||
-moz-box-shadow:0 15px 10px rgba(0, 0, 0, 0.7);
|
||||
box-shadow:0 15px 10px rgba(0, 0, 0, 0.7);
|
||||
-webkit-transform:rotate(-3deg);
|
||||
-moz-transform:rotate(-3deg);
|
||||
-ms-transform:rotate(-3deg);
|
||||
-o-transform:rotate(-3deg);
|
||||
transform:rotate(-3deg);
|
||||
}
|
|
@ -1,80 +0,0 @@
|
|||
/* This file resets EVERYTHING */
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, font, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
font-weight: inherit;
|
||||
font-style: inherit;
|
||||
font-size: 100%;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
/* remember to define focus styles! */
|
||||
:focus {
|
||||
outline: 0;
|
||||
}
|
||||
body {
|
||||
line-height: 1;
|
||||
color: black;
|
||||
background: white;
|
||||
}
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
/* tables still need 'cellspacing="0"' in the markup */
|
||||
table {
|
||||
border-collapse: separate;
|
||||
border-spacing: 0;
|
||||
}
|
||||
caption, th, td {
|
||||
text-align: left;
|
||||
font-weight: normal;
|
||||
}
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: "";
|
||||
}
|
||||
blockquote, q {
|
||||
quotes: "" "";
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight:bold;color:#0289ce;
|
||||
}
|
||||
|
||||
em {
|
||||
font-style:oblique;
|
||||
}
|
||||
|
||||
p {
|
||||
margin:15px 0;
|
||||
}
|
||||
|
||||
.aligncenter, div.aligncenter {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
.alignleft {
|
||||
float: left;
|
||||
}
|
||||
.alignright {
|
||||
float: right;
|
||||
}
|
||||
|
||||
h1 {font-size:180%;}
|
||||
h2 {font-size:150%;}
|
||||
h3 {font-size:125%;}
|
||||
h4 {font-size:100%;}
|
||||
h5 {font-size:90%;}
|
||||
h6 {font-size:80%;}
|
||||
|
||||
a:link {color:#0289ce;}
|
||||
a:hover {color:#f64274;}
|
|
@ -1,2 +0,0 @@
|
|||
/* this file stacks on top of style.css and add additional prettiness */
|
||||
|
Loading…
Reference in New Issue