http://roguebasin.com/api.php?action=feedcontributions&user=Deej&feedformat=atomRogueBasin - User contributions [en]2024-03-28T13:13:31ZUser contributionsMediaWiki 1.36.0http://roguebasin.com/index.php?title=Eben_Howard&diff=39054Eben Howard2014-10-22T20:08:08Z<p>Deej: </p>
<hr />
<div>{{developerinfo|name = Eben Howard<br />
|alias = Deej, SquidPony<br />
|nationality = Montanan<br />
|projects = [[SquidLib]], [[libjcsi]]<br />
|games = [[Quarker]], [[Excitable Digger]], [[Earl_Spork|Earl Spork]], [[EmoSquid]], [[Wyrm]], [[Attack The Geth]], [[Epigon]], [[Kingdom Rangers]], [[Assault Fish]]<br />
|languages = [[Java]], [[C#]], [[Inform 7]], [[Unity 3D]]<br />
|site = http://squidpony.com<br />
}}<br />
<br />
Eben is currently putting together a server based semi-cooperative kinda-multiplayer roguelike with a frontend in Unity 3D and a Fantasy Guild Master Management Sim using the newest alpha of [[SquidLib]].<br />
<br />
If you are in #rgrd on quakenet you can see him as Eben.<br />
<br />
== Medals ==<br />
http://www.roguetemple.com/medals/Medal_7DRL_2009_s.png http://www.roguetemple.com/medals/Medal_7DRL_2010_s.png http://www.roguetemple.com/medals/Medal_7DRL_2011_s.png http://www.roguetemple.com/medals/Medal_7DRL_2012_s.png http://www.roguetemple.com/medals/Medal_7DRL_2013_s.png<br />
[[Category:Developers]]</div>Deejhttp://roguebasin.com/index.php?title=C-Sharp_Example_of_Dungeon-Building_Algorithm&diff=38721C-Sharp Example of Dungeon-Building Algorithm2014-08-15T05:31:33Z<p>Deej: </p>
<hr />
<div>(Made by [[Solarnus]])<br />
<br />
This code is C#, not Java<br />
<br />
<br />
<source lang="csharp"><br />
<br />
public class Dungeon<br />
{<br />
<br />
// misc. messages to print<br />
const string MsgXSize = "X size of dungeon: \t";<br />
<br />
const string MsgYSize = "Y size of dungeon: \t";<br />
<br />
const string MsgMaxObjects = "max # of objects: \t";<br />
<br />
const string MsgNumObjects = "# of objects made: \t";<br />
<br />
// max size of the map<br />
int xmax = 80; //columns<br />
int ymax = 25; //rows<br />
<br />
// size of the map<br />
int _xsize;<br />
int _ysize;<br />
<br />
// number of "objects" to generate on the map<br />
int _objects;<br />
<br />
// define the %chance to generate either a room or a corridor on the map<br />
// BTW, rooms are 1st priority so actually it's enough to just define the chance<br />
// of generating a room<br />
const int ChanceRoom = 75;<br />
<br />
// our map<br />
Tile[] _dungeonMap = { };<br />
<br />
readonly IRandomize _rnd;<br />
<br />
readonly Action<string> _logger;<br />
<br />
<br />
public Dungeon(IRandomize rnd, Action<string> logger)<br />
{<br />
_rnd = rnd;<br />
_logger = logger;<br />
}<br />
<br />
public int Corridors<br />
{<br />
get;<br />
private set;<br />
}<br />
<br />
public static bool IsWall(int x, int y, int xlen, int ylen, int xt, int yt, Direction d)<br />
{<br />
Func<int, int, int> a = GetFeatureLowerBound;<br />
<br />
Func<int, int, int> b = IsFeatureWallBound;<br />
switch (d)<br />
{<br />
case Direction.North:<br />
return xt == a(x, xlen) || xt == b(x, xlen) || yt == y || yt == y - ylen + 1;<br />
case Direction.East:<br />
return xt == x || xt == x + xlen - 1 || yt == a(y, ylen) || yt == b(y, ylen);<br />
case Direction.South:<br />
return xt == a(x, xlen) || xt == b(x, xlen) || yt == y || yt == y + ylen - 1;<br />
case Direction.West:<br />
return xt == x || xt == x - xlen + 1 || yt == a(y, ylen) || yt == b(y, ylen);<br />
}<br />
<br />
throw new InvalidOperationException();<br />
}<br />
<br />
public static int GetFeatureLowerBound(int c, int len)<br />
{<br />
return c - len / 2;<br />
}<br />
<br />
public static int IsFeatureWallBound(int c, int len)<br />
{<br />
return c + (len - 1) / 2;<br />
}<br />
<br />
public static int GetFeatureUpperBound(int c, int len)<br />
{<br />
return c + (len + 1) / 2;<br />
}<br />
<br />
public static IEnumerable<PointI> GetRoomPoints(int x, int y, int xlen, int ylen, Direction d)<br />
{<br />
// north and south share the same x strategy<br />
// east and west share the same y strategy<br />
Func<int, int, int> a = GetFeatureLowerBound;<br />
Func<int, int, int> b = GetFeatureUpperBound;<br />
<br />
switch (d)<br />
{<br />
case Direction.North:<br />
for (var xt = a(x, xlen); xt < b(x, xlen); xt++) for (var yt = y; yt > y - ylen; yt--) yield return new PointI { X = xt, Y = yt };<br />
break;<br />
case Direction.East:<br />
for (var xt = x; xt < x + xlen; xt++) for (var yt = a(y, ylen); yt < b(y, ylen); yt++) yield return new PointI { X = xt, Y = yt };<br />
break;<br />
case Direction.South:<br />
for (var xt = a(x, xlen); xt < b(x, xlen); xt++) for (var yt = y; yt < y + ylen; yt++) yield return new PointI { X = xt, Y = yt };<br />
break;<br />
case Direction.West:<br />
for (var xt = x; xt > x - xlen; xt--) for (var yt = a(y, ylen); yt < b(y, ylen); yt++) yield return new PointI { X = xt, Y = yt };<br />
break;<br />
default:<br />
yield break;<br />
}<br />
}<br />
<br />
public Tile GetCellType(int x, int y)<br />
{<br />
try<br />
{<br />
return this._dungeonMap[x + this._xsize * y];<br />
}<br />
catch (IndexOutOfRangeException)<br />
{<br />
new { x, y }.Dump("exceptional");<br />
throw;<br />
}<br />
}<br />
<br />
public int GetRand(int min, int max)<br />
{<br />
return _rnd.Next(min, max);<br />
}<br />
<br />
public bool MakeCorridor(int x, int y, int length, Direction direction)<br />
{<br />
// define the dimensions of the corridor (er.. only the width and height..)<br />
int len = this.GetRand(2, length);<br />
const Tile Floor = Tile.Corridor;<br />
<br />
int xtemp;<br />
int ytemp = 0;<br />
<br />
switch (direction)<br />
{<br />
case Direction.North:<br />
// north<br />
// check if there's enough space for the corridor<br />
// start with checking it's not out of the boundaries<br />
if (x < 0 || x > this._xsize) return false;<br />
xtemp = x;<br />
<br />
// same thing here, to make sure it's not out of the boundaries<br />
for (ytemp = y; ytemp > (y - len); ytemp--)<br />
{<br />
if (ytemp < 0 || ytemp > this._ysize) return false; // oh boho, it was!<br />
if (GetCellType(xtemp, ytemp) != Tile.Unused) return false;<br />
}<br />
<br />
// if we're still here, let's start building<br />
Corridors++;<br />
for (ytemp = y; ytemp > (y - len); ytemp--)<br />
{<br />
this.SetCell(xtemp, ytemp, Floor);<br />
}<br />
<br />
break;<br />
<br />
case Direction.East:<br />
// east<br />
if (y < 0 || y > this._ysize) return false;<br />
ytemp = y;<br />
<br />
for (xtemp = x; xtemp < (x + len); xtemp++)<br />
{<br />
if (xtemp < 0 || xtemp > this._xsize) return false;<br />
if (GetCellType(xtemp, ytemp) != Tile.Unused) return false;<br />
}<br />
<br />
Corridors++;<br />
for (xtemp = x; xtemp < (x + len); xtemp++)<br />
{<br />
this.SetCell(xtemp, ytemp, Floor);<br />
}<br />
<br />
break;<br />
<br />
case Direction.South:<br />
// south<br />
if (x < 0 || x > this._xsize) return false;<br />
xtemp = x;<br />
<br />
for (ytemp = y; ytemp < (y + len); ytemp++)<br />
{<br />
if (ytemp < 0 || ytemp > this._ysize) return false;<br />
if (GetCellType(xtemp, ytemp) != Tile.Unused) return false;<br />
}<br />
<br />
Corridors++;<br />
for (ytemp = y; ytemp < (y + len); ytemp++)<br />
{<br />
this.SetCell(xtemp, ytemp, Floor);<br />
}<br />
<br />
break;<br />
case Direction.West:<br />
// west<br />
if (ytemp < 0 || ytemp > this._ysize) return false;<br />
ytemp = y;<br />
<br />
for (xtemp = x; xtemp > (x - len); xtemp--)<br />
{<br />
if (xtemp < 0 || xtemp > this._xsize) return false;<br />
if (GetCellType(xtemp, ytemp) != Tile.Unused) return false;<br />
}<br />
<br />
Corridors++;<br />
for (xtemp = x; xtemp > (x - len); xtemp--)<br />
{<br />
this.SetCell(xtemp, ytemp, Floor);<br />
}<br />
<br />
break;<br />
}<br />
<br />
// woot, we're still here! let's tell the other guys we're done!!<br />
return true;<br />
}<br />
<br />
public IEnumerable<Tuple<PointI, Direction>> GetSurroundingPoints(PointI v)<br />
{<br />
var points = new[]<br />
{<br />
Tuple.Create(new PointI { X = v.X, Y = v.Y + 1 }, Direction.North),<br />
Tuple.Create(new PointI { X = v.X - 1, Y = v.Y }, Direction.East),<br />
Tuple.Create(new PointI { X = v.X , Y = v.Y-1 }, Direction.South),<br />
Tuple.Create(new PointI { X = v.X +1, Y = v.Y }, Direction.West),<br />
<br />
};<br />
return points.Where(p => InBounds(p.Item1));<br />
}<br />
<br />
public IEnumerable<Tuple<PointI, Direction, Tile>> GetSurroundings(PointI v)<br />
{<br />
return<br />
this.GetSurroundingPoints(v)<br />
.Select(r => Tuple.Create(r.Item1, r.Item2, this.GetCellType(r.Item1.X, r.Item1.Y)));<br />
}<br />
<br />
public bool InBounds(int x, int y)<br />
{<br />
return x > 0 && x < this.xmax && y > 0 && y < this.ymax;<br />
}<br />
<br />
public bool InBounds(PointI v)<br />
{<br />
return this.InBounds(v.X, v.Y);<br />
}<br />
<br />
public bool MakeRoom(int x, int y, int xlength, int ylength, Direction direction)<br />
{<br />
// define the dimensions of the room, it should be at least 4x4 tiles (2x2 for walking on, the rest is walls)<br />
int xlen = this.GetRand(4, xlength);<br />
int ylen = this.GetRand(4, ylength);<br />
<br />
// the tile type it's going to be filled with<br />
const Tile Floor = Tile.DirtFloor;<br />
<br />
const Tile Wall = Tile.DirtWall;<br />
// choose the way it's pointing at<br />
<br />
var points = GetRoomPoints(x, y, xlen, ylen, direction).ToArray();<br />
<br />
// Check if there's enough space left for it<br />
if (<br />
points.Any(<br />
s =><br />
s.Y < 0 || s.Y > this._ysize || s.X < 0 || s.X > this._xsize || this.GetCellType(s.X, s.Y) != Tile.Unused)) return false;<br />
_logger(<br />
string.Format(<br />
"Making room:int x={0}, int y={1}, int xlength={2}, int ylength={3}, int direction={4}",<br />
x,<br />
y,<br />
xlength,<br />
ylength,<br />
direction));<br />
<br />
foreach (var p in points)<br />
{<br />
this.SetCell(p.X, p.Y, IsWall(x, y, xlen, ylen, p.X, p.Y, direction) ? Wall : Floor);<br />
}<br />
<br />
// yay, all done<br />
return true;<br />
}<br />
<br />
public Tile[] GetDungeon()<br />
{<br />
return this._dungeonMap;<br />
}<br />
<br />
public char GetCellTile(int x, int y)<br />
{<br />
switch (GetCellType(x, y))<br />
{<br />
case Tile.Unused:<br />
return '';<br />
case Tile.DirtWall:<br />
return '|';<br />
case Tile.DirtFloor:<br />
return '_';<br />
case Tile.StoneWall:<br />
return 'S';<br />
case Tile.Corridor:<br />
return '#';<br />
case Tile.Door:<br />
return 'D';<br />
case Tile.Upstairs:<br />
return '+';<br />
case Tile.Downstairs:<br />
return '-';<br />
case Tile.Chest:<br />
return 'C';<br />
default:<br />
throw new ArgumentOutOfRangeException("x,y");<br />
}<br />
}<br />
<br />
//used to print the map on the screen<br />
public void ShowDungeon()<br />
{<br />
for (int y = 0; y < this._ysize; y++)<br />
{<br />
for (int x = 0; x < this._xsize; x++)<br />
{<br />
Console.Write(GetCellTile(x, y));<br />
}<br />
<br />
if (this._xsize <= xmax) Console.WriteLine();<br />
}<br />
}<br />
<br />
public Direction RandomDirection()<br />
{<br />
int dir = this.GetRand(0, 4);<br />
switch (dir)<br />
{<br />
case 0:<br />
return Direction.North;<br />
case 1:<br />
return Direction.East;<br />
case 2:<br />
return Direction.South;<br />
case 3:<br />
return Direction.West;<br />
default:<br />
throw new InvalidOperationException();<br />
}<br />
}<br />
<br />
//and here's the one generating the whole map<br />
public bool CreateDungeon(int inx, int iny, int inobj)<br />
{<br />
this._objects = inobj < 1 ? 10 : inobj;<br />
<br />
// adjust the size of the map, if it's smaller or bigger than the limits<br />
if (inx < 3) this._xsize = 3;<br />
else if (inx > xmax) this._xsize = xmax;<br />
else this._xsize = inx;<br />
<br />
if (iny < 3) this._ysize = 3;<br />
else if (iny > ymax) this._ysize = ymax;<br />
else this._ysize = iny;<br />
<br />
Console.WriteLine(MsgXSize + this._xsize);<br />
Console.WriteLine(MsgYSize + this._ysize);<br />
Console.WriteLine(MsgMaxObjects + this._objects);<br />
<br />
// redefine the map var, so it's adjusted to our new map size<br />
this._dungeonMap = new Tile[this._xsize * this._ysize];<br />
<br />
// start with making the "standard stuff" on the map<br />
this.Initialize();<br />
<br />
/*******************************************************************************<br />
And now the code of the random-map-generation-algorithm begins!<br />
*******************************************************************************/<br />
<br />
// start with making a room in the middle, which we can start building upon<br />
this.MakeRoom(this._xsize / 2, this._ysize / 2, 8, 6, RandomDirection()); // getrand saken f????r att slumpa fram riktning p?? rummet<br />
<br />
// keep count of the number of "objects" we've made<br />
int currentFeatures = 1; // +1 for the first room we just made<br />
<br />
// then we sart the main loop<br />
for (int countingTries = 0; countingTries < 1000; countingTries++)<br />
{<br />
// check if we've reached our quota<br />
if (currentFeatures == this._objects)<br />
{<br />
break;<br />
}<br />
<br />
// start with a random wall<br />
int newx = 0;<br />
int xmod = 0;<br />
int newy = 0;<br />
int ymod = 0;<br />
Direction? validTile = null;<br />
<br />
// 1000 chances to find a suitable object (room or corridor)..<br />
for (int testing = 0; testing < 1000; testing++)<br />
{<br />
newx = this.GetRand(1, this._xsize - 1);<br />
newy = this.GetRand(1, this._ysize - 1);<br />
<br />
if (GetCellType(newx, newy) == Tile.DirtWall || GetCellType(newx, newy) == Tile.Corridor)<br />
{<br />
var surroundings = this.GetSurroundings(new PointI() { X = newx, Y = newy });<br />
<br />
// check if we can reach the place<br />
var canReach =<br />
surroundings.FirstOrDefault(s => s.Item3 == Tile.Corridor || s.Item3 == Tile.DirtFloor);<br />
if (canReach == null)<br />
{<br />
continue;<br />
}<br />
validTile = canReach.Item2;<br />
switch (canReach.Item2)<br />
{<br />
case Direction.North:<br />
xmod = 0;<br />
ymod = -1;<br />
break;<br />
case Direction.East:<br />
xmod = 1;<br />
ymod = 0;<br />
break;<br />
case Direction.South:<br />
xmod = 0;<br />
ymod = 1;<br />
break;<br />
case Direction.West:<br />
xmod = -1;<br />
ymod = 0;<br />
break;<br />
default:<br />
throw new InvalidOperationException();<br />
}<br />
<br />
<br />
// check that we haven't got another door nearby, so we won't get alot of openings besides<br />
// each other<br />
<br />
if (GetCellType(newx, newy + 1) == Tile.Door) // north<br />
{<br />
validTile = null;<br />
<br />
}<br />
<br />
else if (GetCellType(newx - 1, newy) == Tile.Door) // east<br />
validTile = null;<br />
else if (GetCellType(newx, newy - 1) == Tile.Door) // south<br />
validTile = null;<br />
else if (GetCellType(newx + 1, newy) == Tile.Door) // west<br />
validTile = null;<br />
<br />
<br />
// if we can, jump out of the loop and continue with the rest<br />
if (validTile.HasValue) break;<br />
}<br />
}<br />
<br />
if (validTile.HasValue)<br />
{<br />
// choose what to build now at our newly found place, and at what direction<br />
int feature = this.GetRand(0, 100);<br />
if (feature <= ChanceRoom)<br />
{ // a new room<br />
if (this.MakeRoom(newx + xmod, newy + ymod, 8, 6, validTile.Value))<br />
{<br />
currentFeatures++; // add to our quota<br />
<br />
// then we mark the wall opening with a door<br />
this.SetCell(newx, newy, Tile.Door);<br />
<br />
// clean up infront of the door so we can reach it<br />
this.SetCell(newx + xmod, newy + ymod, Tile.DirtFloor);<br />
}<br />
}<br />
else if (feature >= ChanceRoom)<br />
{ // new corridor<br />
if (this.MakeCorridor(newx + xmod, newy + ymod, 6, validTile.Value))<br />
{<br />
// same thing here, add to the quota and a door<br />
currentFeatures++;<br />
<br />
this.SetCell(newx, newy, Tile.Door);<br />
}<br />
}<br />
}<br />
}<br />
<br />
/*******************************************************************************<br />
All done with the building, let's finish this one off<br />
*******************************************************************************/<br />
AddSprinkles();<br />
<br />
// all done with the map generation, tell the user about it and finish<br />
Console.WriteLine(MsgNumObjects + currentFeatures);<br />
<br />
return true;<br />
}<br />
<br />
void Initialize()<br />
{<br />
for (int y = 0; y < this._ysize; y++)<br />
{<br />
for (int x = 0; x < this._xsize; x++)<br />
{<br />
// ie, making the borders of unwalkable walls<br />
if (y == 0 || y == this._ysize - 1 || x == 0 || x == this._xsize - 1)<br />
{<br />
this.SetCell(x, y, Tile.StoneWall);<br />
}<br />
else<br />
{ // and fill the rest with dirt<br />
this.SetCell(x, y, Tile.Unused);<br />
}<br />
}<br />
}<br />
}<br />
<br />
// setting a tile's type<br />
void SetCell(int x, int y, Tile celltype)<br />
{<br />
this._dungeonMap[x + this._xsize * y] = celltype;<br />
}<br />
<br />
<br />
}<br />
}<br />
<br />
</source><br />
<br />
<br />
[[Category:Developing]]</div>Deejhttp://roguebasin.com/index.php?title=SquidLib&diff=38641SquidLib2014-08-03T20:53:30Z<p>Deej: updated for 2.0a1 release</p>
<hr />
<div>{{library| name = SquidLib<br />
|developer = [[user:Deej|Eben Howard]]<br />
|released = Nov. 23rd, 2011<br />
|updated = Aug. 3rd, 2014<br />
|dependencies = Java 7<br />
|status = In Active Development<br />
|licensing = [[Apache 2.0]]<br />
|language = [[Java]]<br />
|platforms = [[Unix]], [[Linux]], [[Mac OS X]], [[Windows]]<br />
|site = https://github.com/SquidPony/SquidLib<br />
}}<br />
<br />
===SquidLib is a Java library that provides a full featured toolbox for working with turn based games in Swing.===<br />
<br />
SquidLib is used for [[Wyrm]], [[Attack The Geth]], [[Assault Fish]], and [[Epigon]]. The most recent stable version is v2.0a1, available at the github repository. Older versions are also available as Release bundles.<br />
<br />
===Current Features===<br />
*Ease Of Use<br />
**Standard GUI notation of (x,y) locations within the grid.<br />
**Uses Swing<br />
**Any Font can be used<br />
**Images may be used alongside characters in same panel<br />
***Characters can be used as a drop-in fallback mechanism!<br />
**Specify Grid and Font size multiple ways<br />
***Set number of cells in the grid and Font to be used<br />
****Size of cell is adjusted to optimally fit the Font size given<br />
***Set size of the cell, number of cells in the grid, and Font to be used<br />
****Font is dynamically resized to fit optimally within the cell<br />
**Font size and style can be changed on the fly<br />
**Multiple grids of different configurations can be used simultaneously in the same display<br />
**Basic Swing animation support<br />
*Lots of Color<br />
**Foreground and Background can be set individually on a per-cell basis<br />
**SColor class extends Color and can be used as a drop-in replacement for any awt.Color needs<br />
**SColor chooser included to visually select named and adjusted colors<br />
**Over 500 named colors<br />
**Automatic color caching minimizes memory overhead<br />
**Can get a list of colors that are a gradient between two colors<br />
**Can perform LIBTCOD style "dark", "light", and "desaturate" commands on any color<br />
**Can get an arbitrary amount of blend between two colors<br />
*Roguelike Specific Toolkit<br />
**Robust Field of View system<br />
*Fully Documented API<br />
**Each named color has a sample of its appearance in the Javadoc against multiple backgrounds<br />
***HTML browsing of the API shows these samples<br />
***Pop-up javadoc in NetBeans and Eclipse show these samples<br />
**Demos of all functionality included<br />
*Math Toolkit<br />
**Custom extension of Random allows drop-in replacement with added features<br />
**Able to find Bresenham Line for 2D and 3D coordinates.<br />
<br />
<br />
GitHub repository: https://github.com/SquidPony/SquidLib<br />
<br />
Blog updates: http://squidpony.com/not-games/squidlib/<br />
<br />
Developed by [[Deej|Eben Howard]]<br />
<br />
[[Category:Developing]]</div>Deejhttp://roguebasin.com/index.php?title=News&diff=38640News2014-08-03T20:46:20Z<p>Deej: </p>
<hr />
<div><!-- Add new news to the top --><br />
<!-- Don't forget to update Recently Updated Roguelikes. --><br />
<!-- !!!!!!!!!!!!!!!! --><br />
<!-- GUYS!!! IF YOU ARE REMOVING OLD NEWS, DON'T FORGET TO UPDATE ARCHIVE AND MOVE DELETED NEWS THERE!--><br />
* 03 August 2014 - [[Assault_Fish]] 1.6 [http://squidpony.com/?p=1022 now with SqudiLib 2.0]<br />
* 03 August 2014 - [[SquidLib]] 2.0a1 [http://forums.roguetemple.com/index.php?topic=4258.0 released]<br />
* 03 August 2014 - [[TomeNET]] 4.5.7a [http://www.tomenet.net released]<br />
* 03 August 2014 - [[SanctuaryRPG]] 1.1.6 [http://www.PlaySRPG.com released]<br />
* 31 July 2014 - [[Ananias]] 1.20 [http://slashland.wordpress.com/2014/07/31/ananias-1-20-released-and-its-awesome/ released]<br />
* 29 July 2014 - [[Death_Of_The_Corpse_Wizard|Death Of The Corpse Wizard]] 0.0.7 [http://procyonic.org/corpseWizard released]<br />
* 27 July 2014 - [[Rogue Effect]] v0.3 [http://dowhilecompiling.blogspot.fi/2014/07/rogue-effect-v03-released.html released]<br />
* 26 July 2014 - [[The Temple of Torment]] Beta 11 [http://thetempleoftorment.blogspot.fi/p/downloads.html released]<br />
* 26 July 2014 - [[SanctuaryRPG]] 1.1.5 [http://www.PlaySRPG.com released]<br />
* 26 July 2014 - [[Allure of the Stars]] 0.4.14 [http://hackage.haskell.org/package/Allure released]<br />
* 25 July 2014 - [[LambdaHack]] 0.2.14 [http://hackage.haskell.org/package/LambdaHack released]<br />
* 24 July 2014 - [[Warlock of Firetop Mountain]] RC3 [https://code.google.com/p/wofm/ released]<br />
* 23 July 2014 - [[1Quest]] 1.2.0 [http://play.google.com/store/apps/details?id=air.fr.ratzngodz.A1Quest released]<br />
* 22 July 2014 - [[Ananias]] 1.19 [http://slashland.wordpress.com/2014/07/22/ananias-1-19-released/ released]<br />
* 21 July 2014 - [[PRIME]] 2.4 [http://forums.roguetemple.com/index.php?topic=4243.0 released]<br />
* 21 July 2014 - [[Solstice]] 0.0.32 [http://solsticeroguelike.weebly.com released]<br />
* 21 July 2014 - [[Prospector]] R189 [http://www.prospector.at released]<br />
* 20 July 2014 - [[Incavead|Infinite Cave Adventure]] version 1725a4a released. <br />
* 20 July 2014 - [[SanctuaryRPG]] 1.1.4 [http://www.PlaySRPG.com released]<br />
* 17 July 2014 - [[WindTales3D]] 1.2 [http://www.windowsphone.com/en-us/store/app/windtales3d/ec4ea9bd-5dcf-4647-bf07-9bcce1560870 released]<br />
* 16 July 2014 - [[The Nightmare Cooperative]] 1.0 [http://luckyframe.co.uk/nightmare/ released]<br />
* 16 July 2014 - [[handhRL]] 0.3 [http://www.bedroomwallpress.com/2014/07/handhrl-now-version-03.html released]<br />
* 15 July 2014 - [[The Temple of Torment]] Beta 10.1 [http://thetempleoftorment.blogspot.fi/p/downloads.html released]<br />
* 14 July 2014 - [[Slash'EM Extended]] v50 [https://app.box.com/s/bjmryzddy3t7llv6jekb/ released]<br />
* 13 July 2014 - [[Wayward]] Beta 1.9.1 [http://www.unlok.ca/wayward/wayward-beta-1-9-1-released/ released]<br />
* 13 July 2014 - [[SanctuaryRPG]] 1.1.3 [http://www.PlaySRPG.com released]<br />
* 12 July 2014 - [[The ground gives way]] Release #2 [http://www.thegroundgivesway.com released]<br />
* 11 July 2014 - [[7KBRLL]] 0.1 [https://sites.google.com/site/7kbrll/ released]<br />
* 10 July 2014 - [[handhRL]] 0.2 [https://github.com/jarcane/handhRL/releases released]<br />
* 08 July 2014 - [[Prospector]] R187 [http://www.prospector.at released]<br />
* 07 July 2014 - [[Dwarf Fortress]] version 0.40.01 [http://www.bay12games.com/dwarves/ released]<br />
* 05 July 2014 - [[Tales of Maj'Eyal]] version 1.2.3 aka "Competitive Ecology" [http://te4.org/blogs/darkgod/2014/07/news/tales-majeyal-123-aka-competitive-ecology-released released]<br />
* 05 July 2014 - [[SanctuaryRPG]] 1.1.2 [http://www.PlaySRPG.com released]<br />
* 03 July 2014 - [[Brogue]] version 1.7.4 [https://sites.google.com/site/broguegame/ released]<br />
* 03 July 2014 - [[The Temple of Torment]] Beta 9.1 [http://thetempleoftorment.blogspot.fi/p/downloads.html released]<br />
* 01 July 2014 - [[Dungeon Run]] early access 1.0 [https://play.google.com/store/apps/details?id=com.HypnoticGames.DungeonRun released]<br />
<br />
<div style="text-align:right"><br />
''See also: [[Old news]], [[Recently Updated Roguelikes]]''<br />
</div><br />
<br />
[[Category:Main]]</div>Deejhttp://roguebasin.com/index.php?title=News&diff=38639News2014-08-03T20:35:07Z<p>Deej: added Assault Fish</p>
<hr />
<div><!-- Add new news to the top --><br />
<!-- Don't forget to update Recently Updated Roguelikes. --><br />
<!-- !!!!!!!!!!!!!!!! --><br />
<!-- GUYS!!! IF YOU ARE REMOVING OLD NEWS, DON'T FORGET TO UPDATE ARCHIVE AND MOVE DELETED NEWS THERE!--><br />
* 03 August 2014 - [[Assault_Fish]] 1.6 [http://squidpony.com/?p=1022 now with SqudiLib 2.0]<br />
* 03 August 2014 - [[TomeNET]] 4.5.7a [http://www.tomenet.net released]<br />
* 03 August 2014 - [[SanctuaryRPG]] 1.1.6 [http://www.PlaySRPG.com released]<br />
* 31 July 2014 - [[Ananias]] 1.20 [http://slashland.wordpress.com/2014/07/31/ananias-1-20-released-and-its-awesome/ released]<br />
* 29 July 2014 - [[Death_Of_The_Corpse_Wizard|Death Of The Corpse Wizard]] 0.0.7 [http://procyonic.org/corpseWizard released]<br />
* 27 July 2014 - [[Rogue Effect]] v0.3 [http://dowhilecompiling.blogspot.fi/2014/07/rogue-effect-v03-released.html released]<br />
* 26 July 2014 - [[The Temple of Torment]] Beta 11 [http://thetempleoftorment.blogspot.fi/p/downloads.html released]<br />
* 26 July 2014 - [[SanctuaryRPG]] 1.1.5 [http://www.PlaySRPG.com released]<br />
* 26 July 2014 - [[Allure of the Stars]] 0.4.14 [http://hackage.haskell.org/package/Allure released]<br />
* 25 July 2014 - [[LambdaHack]] 0.2.14 [http://hackage.haskell.org/package/LambdaHack released]<br />
* 24 July 2014 - [[Warlock of Firetop Mountain]] RC3 [https://code.google.com/p/wofm/ released]<br />
* 23 July 2014 - [[1Quest]] 1.2.0 [http://play.google.com/store/apps/details?id=air.fr.ratzngodz.A1Quest released]<br />
* 22 July 2014 - [[Ananias]] 1.19 [http://slashland.wordpress.com/2014/07/22/ananias-1-19-released/ released]<br />
* 21 July 2014 - [[PRIME]] 2.4 [http://forums.roguetemple.com/index.php?topic=4243.0 released]<br />
* 21 July 2014 - [[Solstice]] 0.0.32 [http://solsticeroguelike.weebly.com released]<br />
* 21 July 2014 - [[Prospector]] R189 [http://www.prospector.at released]<br />
* 20 July 2014 - [[Incavead|Infinite Cave Adventure]] version 1725a4a released. <br />
* 20 July 2014 - [[SanctuaryRPG]] 1.1.4 [http://www.PlaySRPG.com released]<br />
* 17 July 2014 - [[WindTales3D]] 1.2 [http://www.windowsphone.com/en-us/store/app/windtales3d/ec4ea9bd-5dcf-4647-bf07-9bcce1560870 released]<br />
* 16 July 2014 - [[The Nightmare Cooperative]] 1.0 [http://luckyframe.co.uk/nightmare/ released]<br />
* 16 July 2014 - [[handhRL]] 0.3 [http://www.bedroomwallpress.com/2014/07/handhrl-now-version-03.html released]<br />
* 15 July 2014 - [[The Temple of Torment]] Beta 10.1 [http://thetempleoftorment.blogspot.fi/p/downloads.html released]<br />
* 14 July 2014 - [[Slash'EM Extended]] v50 [https://app.box.com/s/bjmryzddy3t7llv6jekb/ released]<br />
* 13 July 2014 - [[Wayward]] Beta 1.9.1 [http://www.unlok.ca/wayward/wayward-beta-1-9-1-released/ released]<br />
* 13 July 2014 - [[SanctuaryRPG]] 1.1.3 [http://www.PlaySRPG.com released]<br />
* 12 July 2014 - [[The ground gives way]] Release #2 [http://www.thegroundgivesway.com released]<br />
* 11 July 2014 - [[7KBRLL]] 0.1 [https://sites.google.com/site/7kbrll/ released]<br />
* 10 July 2014 - [[handhRL]] 0.2 [https://github.com/jarcane/handhRL/releases released]<br />
* 08 July 2014 - [[Prospector]] R187 [http://www.prospector.at released]<br />
* 07 July 2014 - [[Dwarf Fortress]] version 0.40.01 [http://www.bay12games.com/dwarves/ released]<br />
* 05 July 2014 - [[Tales of Maj'Eyal]] version 1.2.3 aka "Competitive Ecology" [http://te4.org/blogs/darkgod/2014/07/news/tales-majeyal-123-aka-competitive-ecology-released released]<br />
* 05 July 2014 - [[SanctuaryRPG]] 1.1.2 [http://www.PlaySRPG.com released]<br />
* 03 July 2014 - [[Brogue]] version 1.7.4 [https://sites.google.com/site/broguegame/ released]<br />
* 03 July 2014 - [[The Temple of Torment]] Beta 9.1 [http://thetempleoftorment.blogspot.fi/p/downloads.html released]<br />
* 01 July 2014 - [[Dungeon Run]] early access 1.0 [https://play.google.com/store/apps/details?id=com.HypnoticGames.DungeonRun released]<br />
<br />
<div style="text-align:right"><br />
''See also: [[Old news]], [[Recently Updated Roguelikes]]''<br />
</div><br />
<br />
[[Category:Main]]</div>Deejhttp://roguebasin.com/index.php?title=Assault_Fish&diff=38638Assault Fish2014-08-03T20:18:01Z<p>Deej: </p>
<hr />
<div>{{game-7drl| name = Assault Fish<br />
|developer = [[Deej|Eben Howard]]<br />
|influences = Fishing Sims<br />
|released = Mar 16, 2014 (7dRL Edition)<br />
|updated = August 2, 2014<br />
|language = [[Java]] 8<br />
|platforms = any with a JRE<br />
|theme = Fishing and Throwing Exploding Fish<br />
|length = Short<br />
|site = https://github.com/SquidPony/AssaultFish<br />
|licensing = Apache 2.0<br />
|interface = [[SquidLib]] 2.0<br />
}}<br />
<br />
Collect fish in a side-view fishing sim! Throw them at enemies in a traditional top-down roguelike view!<br />
<br />
A ranged weapons game, throw elementally charged fish at your enemies for fun and profit! The fish will explode on impact and destroy, create, or change your environment!<br />
<br />
Your goal is to kill all the elemental men!<br />
<br />
This game uses [[SquidLib]] 2.0 for all aspects of display and sound.</div>Deejhttp://roguebasin.com/index.php?title=News&diff=37755News2014-03-17T20:32:52Z<p>Deej: added Assault Fish</p>
<hr />
<div><!-- Add new news to the top --><br />
<!-- Don't forget to update Recently Updated Roguelikes. --><br />
<!-- !!!!!!!!!!!!!!!! --><br />
<!-- GUYS!!! IF YOU ARE REMOVING OLD NEWS, DON'T FORGET TO UPDATE ARCHIVE AND MOVE DELETED NEWS THERE!--><br />
<br />
* 17 March 2014 - [[Assault Fish]] 1.5 Post-7dRL bug fix [http://squidpony.com/computer-games/assault-fish/ released]<br />
* 17 March 2014 - [[Kunoichi]] 1.01 7DRL [http://roguelikeeducation.org/9.html released]<br />
* 17 March 2014 - [[The Veins of the Earth]] 0.13.0 [https://github.com/Zireael07/The-Veins-of-the-Earth/releases released]<br />
* 16 March 2014 - [[DataQueen]] 7DRL 1.00<br />
* 16 March 2014 - [[Rogue Station]] 7DRL [http://www.roguebasin.com/index.php?title=Trefall]<br />
* 16 March 2014 - [[Here Be Dragons]] 7DRL [http://herebedragons.watabou.ru/]<br />
* 16 March 2014 - [[Fida'i]] 7DRL [http://sites.google.com/site/fidairl/]<br />
* 16 March 2014 - [[AndroidLovesKitty]] 1.0a (7DRL) [http://www.caffeineoverdose.me/2014/03/androidloveskitty-7drl-2014-release.html released]<br />
* 16 March 2014 - [[SanctuaryRPG]] 0.9.7 [http://www.PlaySRPG.com released]<br />
* 15 March 2014 - [[Golem Quest]] 7drl [http://tapiov.net/golem-quest/ released]<br />
* 15 March 2014 - [[Commission Impossible]] 1.0.1 (7DRL) [http://jacobwgames.wordpress.com/2014/03/14/7drl2014-update-success/]<br />
* 15 March 2014 - [[Fragility]] 7drl version [https://www.dropbox.com/s/pg3j1plok8r2nrt/fragility_7drl_2014.rar]<br />
* 14 March 2014 - [[Goldfish]] v1.0 (7DRL) [http://ondras.github.io/goldfish/ finished]<br />
* 13 March 2014 - [[Amber Halls]] v1.0 [https://itunes.apple.com/us/app/amber-halls/id797709886?ls=1&mt=8 released on iOS]<br />
* 8 March 2014 - [[SanctuaryRPG]] 0.9.6 [http://www.PlaySRPG.com released]<br />
* 8 March 2014 - [[Rogue Effect]] v0.2 [http://dowhilecompiling.blogspot.fi/2014/03/rogue-effect-v02-released.html released]<br />
* 4 March 2014 - [[Allure of the Stars]] 0.4.12 [http://hackage.haskell.org/package/Allure released]<br />
* 4 March 2014 - [[LambdaHack]] 0.2.12 [http://hackage.haskell.org/package/LambdaHack released]<br />
* 2 March 2014 - [[Hyperbolic Rogue|HyperRogue]] 4.4 [http://zenorogue.blogspot.com/2014/03/hyperrogue-44.html released]<br />
* 2 March 2014 - [[CataclysmDDA]] version 0.A Kaufman [http://smf.cataclysmdda.com/index.php?topic=5544.0 released]<br />
* 28 February 2014 - [[UnReal World]] 3.18 (stable) [http://www.unrealworld.fi/ released]<br />
* 27 February 2014 - [[3089]] v1.2.2 [http://3089game.wordpress.com/ released]<br />
* 27 February 2014 - [http://ibol17.itch.io/approaching-infinity-early-access Approaching Infinity] Level Editor [http://ibol17.itch.io/approaching-infinity-level-editor released]<br />
* 22 February 2014 - [[NotEye]] 7.5 and [[Hydra Slayer]] 15.5 [http://zenorogue.blogspot.com/2014/02/noteye-75-tpp-samples-7drl-invitation.html released]<br />
* 20 February 2014 - [[Red Wizard]] 2014.02.21.1429 [https://play.google.com/store/apps/details?id=nz.co.sweetsoftware.rw released]<br />
* 20 February 2014 - [[HumFallRL]] v5 [https://www.dropbox.com/s/j4rvp5pb2k0y4a7/humfallrl_v5.rar released]<br />
* 20 February 2014 - [[1Quest]] 1.0.1 [http://ratzngodz.itch.io/1quest released] [http://steamcommunity.com/sharedfiles/filedetails/?id=229922393 greenlight]<br />
* 20 February 2014 - [[Pixel Dungeon]] 1.6.3 [https://play.google.com/store/apps/details?id=com.watabou.pixeldungeon released]<br />
* 19 February 2014 - [[Incavead|Infinite Cave Adventure]] version 68af525 released.<br />
* 18 February 2014 - [[Alistare]] alpha 0.14 [http://Plefnuts.com/ released]<br />
* 17 February 2014 - [[WazHack]] 1.2 [http://store.steampowered.com/app/264160 released on Steam]<br />
* 16 February 2014 - [[Wayward]] beta 1.7 [http://www.unlok.ca/wayward/wayward-beta-1-7-released-refinedefine/ released]<br />
* 15 February 2014 - [[SanctuaryRPG]] 0.9.5 [http://www.PlaySRPG.com released]<br />
* 13 February 2014 - [[Rogue's Souls]] 0.96 [http://forums.tigsource.com/index.php?topic=26781.0 released]<br />
* 12 February 2014 - [[Fame]] 0.9.1 [https://sourceforge.net/p/untitled-rpg/blog/ released]<br />
* 12 February 2014 - [[HumFallRL]] v3 [https://www.dropbox.com/s/v7yrbi3en5t5v0q/humfallrl_v3.rar released]<br />
* 11 February 2014 - [[SadConsole]] 1.3.110 [http://sadconsole.sadlogic.com/index.php/Main_Page#Downloads released] (hotfix)<br />
* 10 February 2014 - [[SadConsole]] 1.3.109 [http://sadconsole.sadlogic.com/index.php/Main_Page#Downloads released]<br />
* 10 February 2014 - [[Forays into Norrendrin]] v0.8.2 [https://bitbucket.org/derrickcreamer/forays-into-norrendrin/downloads/ForaysIntoNorrendrin_v082.zip released]<br />
* 10 February 2014 - [[HumFallRL]] v2 [https://www.dropbox.com/s/66mqm8vq9gunt0p/humfallrl_v2.rar released]<br />
* 10 February 2014 - [[PonyRL]] v0.9.2 [http://ponyrl.com/ released]<br />
* 9 February 2014 - [[KeeperRL]] alpha5 [http://keeperrl.com/ released]<br />
* 6 February 2014 - [[3089]] v1.1.3 [http://3089game.wordpress.com/ released]<br />
* 2 February 2014 - [[Incavead|Infinite Cave Adventure]] version 50b25f2 released.<br />
<br />
<div style="text-align:right"><br />
''See also: [[Old news]], [[Recently Updated Roguelikes]]''<br />
</div><br />
<br />
[[Category:Main]]</div>Deejhttp://roguebasin.com/index.php?title=Assault_Fish&diff=37754Assault Fish2014-03-17T20:30:19Z<p>Deej: creating the page</p>
<hr />
<div>{{game-7drl| name = Assault Fish<br />
|developer = [[Deej|Eben Howard]]<br />
|influences = Fishing Sims<br />
|released = Mar 16, 2014 (7dRL Edition)<br />
|updated = Mar 17, 2014 (v1.5)<br />
|language = [[Java]] 7<br />
|platforms = any with a JRE<br />
|theme = Fishing and Throwing Exploding Fish<br />
|length = Short<br />
|site = http://squidpony.com/<br />
|licensing = Apache 2.0<br />
|interface = [[SquidLib]]<br />
}}<br />
<br />
A ranged weapons game, throw elementally charged fish at your enemies for fun and profit! The fish will explode on impact and destroy, create, or change your environment!<br />
<br />
Your goal is to kill all the elemental men!<br />
<br />
This game uses [[SquidLib]] for the primary display, although some of the features it uses are part of the experimental branch.</div>Deejhttp://roguebasin.com/index.php?title=Eben_Howard&diff=37753Eben Howard2014-03-17T20:26:02Z<p>Deej: added assault fish under games</p>
<hr />
<div>{{developerinfo|name = Eben Howard<br />
|alias = Deej, SquidPony<br />
|nationality = Montanan<br />
|projects = [[SquidLib]], [[libjcsi]]<br />
|games = [[Quarker]], [[Excitable Digger]], [[Earl_Spork|Earl Spork]], [[EmoSquid]], [[Wyrm]], [[Attack The Geth]], [[Epigon]], [[Kingdom Rangers]], [[Assault Fish]]<br />
|languages = [[Java]], [[C#]], [[Inform 7]], [[Unity 3D]]<br />
|site = http://squidpony.com<br />
}}<br />
<br />
Eben is currently putting together a server based semi-cooperative kinda-multiplayer roguelike with a frontend in Unity 3D.<br />
<br />
If you are in #rgrd on quakenet you can see him as Eben.<br />
<br />
== Medals ==<br />
http://www.roguetemple.com/medals/Medal_7DRL_2009_s.png http://www.roguetemple.com/medals/Medal_7DRL_2010_s.png http://www.roguetemple.com/medals/Medal_7DRL_2011_s.png http://www.roguetemple.com/medals/Medal_7DRL_2012_s.png http://www.roguetemple.com/medals/Medal_7DRL_2013_s.png<br />
[[Category:Developers]]</div>Deejhttp://roguebasin.com/index.php?title=2013_ARRP&diff=361042013 ARRP2013-08-16T16:16:41Z<p>Deej: </p>
<hr />
<div>The 2013 [[The annual roguelike release party|Annual Roguelike Release Party]] (ARRP) will be held on the 21st and 22nd of September 2013. This is nearest weekend to 6 months after the 2013 7DRL competition. The aim of the weekend is to encourage more releases and updates, from minor bugfixes to whole new games. Don't let your game sit in the shadows as you tweak and polish - come join the party!<br />
<br />
''Those who plan to participate are encouraged to declare their planned releases. Announcement is not necessary though - simply releasing your game or updating on the above dates is required to participate.'' <br />
<br />
== Participants ==<br />
<br />
* [[Eben Howard]], Team Norsk - [[Kingdom Rangers]] Alpha 1.0<br />
* [[User:Vaughn|Vaughn Royko]] - [[Wayward]] Beta 1.*?<br />
* RRRSTeam - [[RRRSRoguelike]] AncientBlade <br />
* [[User:zasvid|zasvid]] - [[Cosmic Commando]] v. 0.3<br />
* [[Watabou]] - [[Pixel Dungeon]] 1.0?<br />
* [[User:kitfoxgames|Tanya, Xin, Mike & Greg]] - [http://www.kitfoxgames.com Shattered Planet] first demo<br />
<br />
[[Category:Events]]</div>Deejhttp://roguebasin.com/index.php?title=Eben_Howard&diff=36097Eben Howard2013-08-15T21:11:39Z<p>Deej: </p>
<hr />
<div>{{developerinfo|name = Eben Howard<br />
|alias = Deej, SquidPony<br />
|nationality = Montanan<br />
|projects = [[SquidLib]], [[libjcsi]]<br />
|games = [[Quarker]], [[Excitable Digger]], [[Earl_Spork|Earl Spork]], [[EmoSquid]], [[Wyrm]], [[Attack The Geth]], [[Epigon]], [[Kingdom Rangers]]<br />
|languages = [[Java]], [[C#]], [[Inform 7]], [[Unity 3D]]<br />
|site = http://squidpony.com<br />
}}<br />
<br />
Eben is currently putting together a server based semi-cooperative kinda-multiplayer roguelike with a frontend in Unity 3D.<br />
<br />
If you are in #rgrd on quakenet you can see him as Eben.<br />
<br />
== Medals ==<br />
http://www.roguetemple.com/medals/Medal_7DRL_2009_s.png http://www.roguetemple.com/medals/Medal_7DRL_2010_s.png http://www.roguetemple.com/medals/Medal_7DRL_2011_s.png http://www.roguetemple.com/medals/Medal_7DRL_2012_s.png http://www.roguetemple.com/medals/Medal_7DRL_2013_s.png<br />
[[Category:Developers]]</div>Deejhttp://roguebasin.com/index.php?title=2013_ARRP&diff=360962013 ARRP2013-08-15T20:56:28Z<p>Deej: added Kingdom Rangers</p>
<hr />
<div>The 2013 [[The annual roguelike release party|Annual Roguelike Release Party]] (ARRP) will be held on the 21st and 22nd of September 2013. This is nearest weekend to 6 months after the 2013 7DRL competition. The aim of the weekend is to encourage more releases and updates, from minor bugfixes to whole new games. Don't let your game sit in the shadows as you tweak and polish - come join the party!<br />
<br />
''Those who plan to participate are encouraged to declare their planned releases. Announcement is not necessary though - simply releasing your game or updating on the above dates is required to participate.'' <br />
<br />
== Participants ==<br />
http://roguebasin.roguelikedevelopment.org/skins/common/images/button_media.png<br />
<br />
* [[Eben Howard]], Team Norsk - [[Kingdom Rangers]] Alpha 1.0<br />
* [[User:Vaughn|Vaughn Royko]] - [[Wayward]] Beta 1.*?<br />
* RRRSTeam - [[RRRSRoguelike]] AncientBlade <br />
* [[User:zasvid|zasvid]] - [[Cosmic Commando]] v. 0.3<br />
* [[Watabou]] - [[Pixel Dungeon]] 1.0?<br />
* [[User:kitfoxgames|Tanya, Xin, Mike & Greg]] - [http://www.kitfoxgames.com Shattered Planet] first demo<br />
<br />
[[Category:Events]]</div>Deejhttp://roguebasin.com/index.php?title=Improved_Shadowcasting_in_Java&diff=36009Improved Shadowcasting in Java2013-08-06T05:34:34Z<p>Deej: edited radius calculation for brightness</p>
<hr />
<div>This Shadowcasting algorithm is from [[SquidLib]] by [[Eben Howard]].<br />
<br />
It features a shortened form of the standard recursive algorithm with easy to read notation.<br />
<br />
The Direction.DIAGONALS that is referred to is a list of x and y offsets, which is all combinations of plus and minus 1.<br />
<br />
The RadiusStrategy is an strategy pattern class that allows alternate radius calculations to be used. This allows for circular, square, diamond, or any custom formula for radius.<br />
<br />
The class member variables should be straightforward, they're the this.foo items at the beginning.<br />
<br />
<div style="background-color: #EEEEEE; border-style: dotted; padding: 0.3em"><br />
<syntaxhighlight lang="java"><br />
/**<br />
* Calculates the Field Of View for the provided map from the given x, y<br />
* coordinates. Returns a lightmap for a result where the values represent a<br />
* percentage of fully lit.<br />
*<br />
* A value equal to or below 0 means that cell is not in the<br />
* field of view, whereas a value equal to or above 1 means that cell is<br />
* in the field of view.<br />
*<br />
* @param resistanceMap the grid of cells to calculate on where 0 is transparent and 1 is opaque<br />
* @param startx the horizontal component of the starting location<br />
* @param starty the vertical component of the starting location<br />
* @param radius the maximum distance to draw the FOV<br />
* @param radiusStrategy provides a means to calculate the radius as desired<br />
* @return the computed light grid<br />
*/<br />
public float[][] calculateFOV(float[][] resistanceMap, int startx, int starty, float radius, RadiusStrategy rStrat) {<br />
this.startx = startx;<br />
this.starty = starty;<br />
this.radius = radius;<br />
this.rStrat = rStrat;<br />
this.resistanceMap = resistanceMap;<br />
<br />
width = resistanceMap.length;<br />
height = resistanceMap[0].length;<br />
lightMap = new float[width][height];<br />
<br />
lightMap[startx][starty] = force;//light the starting cell<br />
for (Direction d : Direction.DIAGONALS) {<br />
castLight(1, 1.0f, 0.0f, 0, d.deltaX, d.deltaY, 0);<br />
castLight(1, 1.0f, 0.0f, d.deltaX, 0, 0, d.deltaY);<br />
}<br />
<br />
return lightMap;<br />
}<br />
<br />
private void castLight(int row, float start, float end, int xx, int xy, int yx, int yy) {<br />
float newStart = 0.0f;<br />
if (start < end) {<br />
return;<br />
}<br />
boolean blocked = false;<br />
for (int distance = row; distance <= radius && !blocked; distance++) {<br />
int deltaY = -distance;<br />
for (int deltaX = -distance; deltaX <= 0; deltaX++) {<br />
int currentX = startx + deltaX * xx + deltaY * xy;<br />
int currentY = starty + deltaX * yx + deltaY * yy;<br />
float leftSlope = (deltaX - 0.5f) / (deltaY + 0.5f);<br />
float rightSlope = (deltaX + 0.5f) / (deltaY - 0.5f);<br />
<br />
if (!(currentX >= 0 && currentY >= 0 && currentX < this.width && currentY < this.height) || start < rightSlope) {<br />
continue;<br />
} else if (end > leftSlope) {<br />
break;<br />
}<br />
<br />
//check if it's within the lightable area and light if needed<br />
if (rStrat.radius(deltaX, deltaY) <= radius) {<br />
float bright = (float) (1 - (rStrat.radius(deltaX, deltaY) / radius));<br />
lightMap[currentX][currentY] = bright;<br />
}<br />
<br />
if (blocked) { //previous cell was a blocking one<br />
if (resistanceMap[currentX][currentY] >= 1) {//hit a wall<br />
newStart = rightSlope;<br />
continue;<br />
} else {<br />
blocked = false;<br />
start = newStart;<br />
}<br />
} else {<br />
if (resistanceMap[currentX][currentY] >= 1 && distance < radius) {//hit a wall within sight line<br />
blocked = true;<br />
castLight(distance + 1, start, leftSlope, xx, xy, yx, yy);<br />
newStart = rightSlope;<br />
}<br />
}<br />
}<br />
}<br />
}<br />
</syntaxhighlight><br />
</div><br />
<br />
[[Category:Articles]][[Category:FOV]]</div>Deejhttp://roguebasin.com/index.php?title=Improved_Shadowcasting_in_Java&diff=36008Improved Shadowcasting in Java2013-08-06T05:26:30Z<p>Deej: changed algorithm to use simple radius input rather than force and decay</p>
<hr />
<div>This Shadowcasting algorithm is from [[SquidLib]] by [[Eben Howard]].<br />
<br />
It features a shortened form of the standard recursive algorithm with easy to read notation.<br />
<br />
The Direction.DIAGONALS that is referred to is a list of x and y offsets, which is all combinations of plus and minus 1.<br />
<br />
The RadiusStrategy is an strategy pattern class that allows alternate radius calculations to be used. This allows for circular, square, diamond, or any custom formula for radius.<br />
<br />
The class member variables should be straightforward, they're the this.foo items at the beginning.<br />
<br />
<div style="background-color: #EEEEEE; border-style: dotted; padding: 0.3em"><br />
<syntaxhighlight lang="java"><br />
/**<br />
* Calculates the Field Of View for the provided map from the given x, y<br />
* coordinates. Returns a lightmap for a result where the values represent a<br />
* percentage of fully lit.<br />
*<br />
* A value equal to or below 0 means that cell is not in the<br />
* field of view, whereas a value equal to or above 1 means that cell is<br />
* in the field of view.<br />
*<br />
* @param resistanceMap the grid of cells to calculate on where 0 is transparent and 1 is opaque<br />
* @param startx the horizontal component of the starting location<br />
* @param starty the vertical component of the starting location<br />
* @param radius the maximum distance to draw the FOV<br />
* @param radiusStrategy provides a means to calculate the radius as desired<br />
* @return the computed light grid<br />
*/<br />
public float[][] calculateFOV(float[][] resistanceMap, int startx, int starty, float radius, RadiusStrategy rStrat) {<br />
this.startx = startx;<br />
this.starty = starty;<br />
this.radius = radius;<br />
this.rStrat = rStrat;<br />
this.resistanceMap = resistanceMap;<br />
<br />
width = resistanceMap.length;<br />
height = resistanceMap[0].length;<br />
lightMap = new float[width][height];<br />
<br />
lightMap[startx][starty] = force;//light the starting cell<br />
for (Direction d : Direction.DIAGONALS) {<br />
castLight(1, 1.0f, 0.0f, 0, d.deltaX, d.deltaY, 0);<br />
castLight(1, 1.0f, 0.0f, d.deltaX, 0, 0, d.deltaY);<br />
}<br />
<br />
return lightMap;<br />
}<br />
<br />
private void castLight(int row, float start, float end, int xx, int xy, int yx, int yy) {<br />
float newStart = 0.0f;<br />
if (start < end) {<br />
return;<br />
}<br />
boolean blocked = false;<br />
for (int distance = row; distance <= radius && !blocked; distance++) {<br />
int deltaY = -distance;<br />
for (int deltaX = -distance; deltaX <= 0; deltaX++) {<br />
int currentX = startx + deltaX * xx + deltaY * xy;<br />
int currentY = starty + deltaX * yx + deltaY * yy;<br />
float leftSlope = (deltaX - 0.5f) / (deltaY + 0.5f);<br />
float rightSlope = (deltaX + 0.5f) / (deltaY - 0.5f);<br />
<br />
if (!(currentX >= 0 && currentY >= 0 && currentX < this.width && currentY < this.height) || start < rightSlope) {<br />
continue;<br />
} else if (end > leftSlope) {<br />
break;<br />
}<br />
<br />
//check if it's within the lightable area and light if needed<br />
if (rStrat.radius(deltaX, deltaY) <= radius) {<br />
float bright = (float) (1 - (decay * rStrat.radius(deltaX, deltaY) / force));<br />
lightMap[currentX][currentY] = bright;<br />
}<br />
<br />
if (blocked) { //previous cell was a blocking one<br />
if (resistanceMap[currentX][currentY] >= 1) {//hit a wall<br />
newStart = rightSlope;<br />
continue;<br />
} else {<br />
blocked = false;<br />
start = newStart;<br />
}<br />
} else {<br />
if (resistanceMap[currentX][currentY] >= 1 && distance < radius) {//hit a wall within sight line<br />
blocked = true;<br />
castLight(distance + 1, start, leftSlope, xx, xy, yx, yy);<br />
newStart = rightSlope;<br />
}<br />
}<br />
}<br />
}<br />
}<br />
</syntaxhighlight><br />
</div><br />
<br />
[[Category:Articles]][[Category:FOV]]</div>Deejhttp://roguebasin.com/index.php?title=FOV_using_recursive_shadowcasting&diff=36007FOV using recursive shadowcasting2013-08-06T00:24:41Z<p>Deej: /* Implementations */ added link to Java implementation</p>
<hr />
<div>FOV using recursive shadowcasting - Bj&ouml;rn Bergstr&ouml;m [bjorn.bergstrom@roguelikedevelopment.org]<br />
<br />
==Introduction==<br />
A working field-of-view (or commonly known as line of sight) algorithm is one of<br />
the essential parts in any roguelike. A FOV algorithm is used to calculate which<br />
mapcells, within a given radius, that can be seen, or in the case of a<br />
lightsource, which mapcells that are lit.<br />
<br />
The simplest approach is to trace lines from the center out to all of the<br />
mapcells at the edge of the radius and stopping when a mapcell is blocking line<br />
of sight. The problem with this approach is that many mapcells are visited<br />
several times, most often near the starting point and more seldom at the edges.<br />
There are a few things that can improve the performance of this simple approach.<br />
The most obvious is improvement can be made when a blocking mapcell is hit.<br />
Using a simple calculation all rays that cross the blocking mapcell can be<br />
skipped, hence improving performance. All of this is covered in detail in other<br />
LOS articles. "Line of Sight" by Tobias Downer is a good starting point.<br />
<br />
Even if the "rayskipping" described above is implemented many mapcells will be<br />
visited more than once, thus wasting CPU time. To overcome this a totally<br />
different approach must be used. This approach is called shadowcasting.<br />
<br />
<br />
==Shadowcasting==<br />
Shadowcasting divides the FOV calculations into eight octants and visits the<br />
mapcells in a totally different way than normal raycasting, described above.<br />
Instead of tracing lines from the center out to the edges, shadowcasting visits<br />
mapcells row by row or column by column, starting with the nearest row or column<br />
and working it's way outward.<br />
<br />
<pre><br />
------> 6 row 6 last<br />
-----> 5 .<br />
----> 4 .<br />
---> 3 .<br />
--> 2 row 2 second<br />
-> 1 row 1 is scanned first<br />
@ @ this is the starting point <br />
<br />
Fig.2a Shadowcasting order of scanning<br />
</pre><br />
<br />
When a scan comes across a cell that blocks LOS it calculates which other cells<br />
in rows/columns farther away that isn't visible because of the blocker. Those<br />
cells are "in shadow", hence the term shadowcasting.<br />
<br />
<pre><br />
-...--- - = visible cells<br />
-..--- # = blocking cell<br />
-#--- . = cells in blocker's shadow<br />
----<br />
---<br />
--<br />
@<br />
<br />
Fig.2b Cells in shadow of blocker<br />
</pre><br />
<br />
Normal shadowcasting is described in detail in the article<br />
[[Computing LOS for Large Areas]] by Gordon Lipford. Gordon's algorithm uses<br />
a temporary array and is rather complex. Using recursion one can achieve a<br />
clean and pretty fast algorithm that only visits non blocking and blocking<br />
cells, leaving out the cells in shadow. The algorithm is especially fast in<br />
confined areas such as corridors and small rooms.<br />
<br />
==Definitions==<br />
In order to understand recursive shadowcasting one need to understand what the<br />
slope and inverse slope of a line means. The slope is calculated using this<br />
simple formula:<br />
<br />
slope = (x1 - x2) / (y1 - y2)<br />
<br />
If we draw a line between [6,6] and [5,3] the slope would be:<br />
<br />
slope = (6 - 5) / (6 - 3) = 1 / 3 = 0.33333<br />
<br />
If we were to walk along this line we would find that for each step that we<br />
decreased y, x would be decreased 0.3333.<br />
<br />
The inverse slope is simply 1 / slope.<br />
<br />
<br />
<br />
==Recursive Shadowcasting==<br />
<br />
Recursive shadowcasting divides the field of view into eight octants with shared<br />
edges. The field of view will look like this when the octants are marked:<br />
<br />
<pre><br />
Shared<br />
edge by<br />
Shared 1 & 2 Shared<br />
edge by\ | /edge by<br />
1 & 8 \ | / 2 & 3<br />
\1111|2222/<br />
8\111|222/3<br />
88\11|22/33<br />
888\1|2/333<br />
Shared 8888\|/3333 Shared<br />
edge by-------@-------edge by<br />
7 & 8 7777/|\4444 3 & 4<br />
777/6|5\444<br />
77/66|55\44<br />
7/666|555\4<br />
/6666|5555\<br />
Shared / | \ Shared<br />
edge by/ | \edge by<br />
6 & 7 Shared 4 & 5<br />
edge by <br />
5 & 6<br />
<br />
Fig.4a Area of coverage by each octant<br />
</pre><br />
<br />
As with normal shadowcasting, this recursive shadowcasting algorithm scans an<br />
octant row by row or column by column, depending on the octant. In each octant<br />
the rows/columns closest to the starting point are scanned first.<br />
<br />
<br />
In octant 1 and 6 the scans are performed row by row, going from the leftmost<br />
cell to the rightmost cell in each row.<br />
<br />
In octant 2 and 5 the scans are performed row by row, going from the rightmost<br />
cell to the leftmost cell in each row.<br />
<br />
In octant 3 and 8 the scans are performed column by column, going from the<br />
topmost cell to the bottom most cell in each column.<br />
<br />
In octant 4 and 7 the scans are performed column by column, going from the<br />
bottom most cell to the topmost cell in each column.<br />
<br />
<br />
When a blocking cell is found a new scan is recursivly started one row/column<br />
further away, covering the area up until the first cell in shadow of the<br />
blocker. The rest of the initial row/column is scanned and subsequent blocking<br />
cells directly adjacent to the initial blocker is skipped. If a new section of<br />
non-blocking cells, followed by a blocker, is found the procedure is repeated.<br />
<br />
I will try to illustrate the procedure described above using some simple ascii<br />
drawings. The area that we wish to calculate a field of view for looks like<br />
this:<br />
<br />
<pre><br />
................. 16 @ = starting cell<br />
......###....... 15 # = blocking cell<br />
.....###....... 14 . = non-blocking cell<br />
....###..#..## 13 <br />
...##........ 12<br />
............ 11<br />
........... 10<br />
.......... 9<br />
......... 8<br />
........ 7<br />
....... 6<br />
...... 5<br />
..... 4<br />
.... 3<br />
... 2<br />
.. 1<br />
@<br />
<br />
Fig.4b Field of view<br />
</pre><br />
<br />
Rows 1 through 11 are all scanned without any problems from left to right. When<br />
the rightmost cell is reached a new scan is started one row further away, just<br />
as described before.<br />
<br />
If we were to draw a line from the center of the starting cell to the center of<br />
the leftmost cell in any of these rows we would find that the slope is 1. We<br />
call this the scan's start slope. If we would do the same for the rightmost cell<br />
the slope would be 0. This slope is ofcourse called the end slope.<br />
<br />
When we reach the 12th row things are becoming a bit more interesting. The<br />
recursion is started when we get to row 12 and hit the blocking cells.<br />
<br />
<pre><br />
................. 16 # = blocking cell<br />
......###....... 15 . = non-blocking cell<br />
.....###....... 14 <br />
....###..#..## 13 <br />
...x#........ 12 x = first blocking cell<br />
<br />
Fig.4c The first blocking cell<br />
</pre><br />
<br />
When the first blocking cell is hit (x) a new scan is started on row 13. The<br />
start slope is ofcourse the same as for all of the previous rows (ie. 1), but<br />
the end slope is different. The end slope is calculated using a line from the<br />
starting point to a point that 'brushes' by to the left of the blocking cell. If<br />
we zoom in it looks something like this:<br />
<br />
<pre><br />
+---+xxxxx##### x = first blocking cell<br />
| |xxxxx##### a = point that 'brushes' by to<br />
| |xxxxx##### the left of the blocking cell<br />
| |xxxxx#####<br />
+---axxxxx#####<br />
+---++---++---+<br />
| || || |<br />
| || || |<br />
| || || |<br />
+---++---++---+<br />
<br />
Fig.4d Zoom in on the first blocking cell<br />
</pre><br />
<br />
Thus, the end slope is obtained using a line from the center starting cell to<br />
the point marked 'a' in the figure. This gives an end slope of about 0.82.<br />
<br />
Ok, so now we have two scans; the original that continues to scan row 12 until<br />
the rightmost cell is reached and a new scan that scans row 13 from the leftmost<br />
cell (start slope 1) to the cell at row 13 that intersects the line with a slope<br />
of 0.82 (end slope):<br />
<br />
<pre><br />
2222............. 16 # = blocking cell<br />
2222..###....... 15 . = non-blocking cell<br />
222..###....... 14 <br />
222.###..#..## 13 1 = original scan <br />
111##11111111 12 2 = new scan<br />
<br />
Fig.4e Current scans<br />
</pre><br />
<br />
Ok, lets return to the original scan on row 12. The scan had just come across<br />
the first blocking cell and recursivly started a new scan one row further away<br />
with a new end slope. The original scan now checks the next cell and finds that<br />
this one is also a blocking cell. Since the previous cell was a blocking cell<br />
too, we have come across a section of blocker and just continue scanning until<br />
we reach a non blocking cell:<br />
<br />
<pre><br />
................. 16 # = blocking cell<br />
......###....... 15 . = non-blocking cell<br />
.....###....... 14 <br />
....###..#..## 13 <br />
...##o....... 12 o = first non-blocking cell after a section of blockers<br />
<br />
Fig.4f First non-blocking cell after a blocker<br />
</pre><br />
<br />
When the first non-blocking cell is found after a section of blockers we need to<br />
calculate a new start slope for the scan. This is done using a line from the<br />
center of the starting cell to a point that 'brushes' by to the right of the<br />
blocking cell. If we zoom in it looks something like this:<br />
<br />
<pre><br />
##########aoooo o = first non-blocking cell<br />
##########o o a = point that 'brushes' by to the<br />
##########o o right of the blocking cell<br />
##########o o<br />
##########ooooo<br />
+---++---++---+<br />
| || || |<br />
| || || |<br />
| || || |<br />
+---++---++---+<br />
<br />
Fig.4g Zoom in on the first non-blocking cell<br />
</pre><br />
<br />
Thus, the new start slope of the original scan is obtained using a line from the<br />
center of the starting cell to the point marked 'a' in the figure. This gives a<br />
start slope of 0.6.<br />
<br />
Ok, once a scan has reached it's last cell the scan is finished and a new scan<br />
is started one row further away if, and only if, the last cell was a<br />
non-blocking cell. In the case of our original scan the last cell was a<br />
non-blocking cell so a new scan is started one row further away with the new<br />
start slope of 0.6 (instead of the old 1).<br />
<br />
<br />
When the original scan starts on row 13 a blocking cell is immediately found:<br />
<br />
<pre><br />
................. 16 # = blocking cell<br />
......###....... 15 . = non-blocking cell<br />
.....###....... 14 <br />
....##x..#..## 13 x = blocking cell in original scan<br />
<br />
Fig.4h Starting with a blocking cell<br />
</pre><br />
<br />
When this happens we continue scanning until a non-blocking cell is found. In<br />
this case the next cell is a non-blocking cell and we calculate a new start<br />
slope in the same manner as on row 12 when we passed the section of blockers.<br />
After this is done we continue to scan from left to right until we reach the<br />
last cell or until we hit a blocking cell. In our example a blocking cell is<br />
found before we reach the last cell:<br />
<br />
<pre><br />
................. 16 # = blocking cell<br />
......###....... 15 . = non-blocking cell<br />
.....###....... 14 <br />
....##...x..## 13 x = blocking cell in original scan<br />
<br />
Fig.4i Another blocking cell<br />
</pre><br />
<br />
A new scan is now recursively started in the same way as on row 12. The scan has<br />
the same start slope as the original scan (0.6) and an end slope of a line that<br />
'brushes' by to the left of the blocking cell (marked x in fig.4i). Now we have<br />
three active scans:<br />
<br />
<pre><br />
2222......33..... 16<br />
2222..##333..... 15<br />
222..##333..... 14 <br />
222.###11#11## 13 <br />
<br />
Fig.4j Active scans<br />
</pre><br />
<br />
The same procedure is repeated once more when we move out of the blocking cell,<br />
find two new non-blocking cells and the run into yet another blocking cell:<br />
<br />
<pre><br />
2222......33444.. 16<br />
2222..##333.44.. 15<br />
222..##333.44.. 14 <br />
222.##111#11## 13 <br />
<br />
Fig.4k Active scans<br />
</pre><br />
<br />
When the original scan ends at the rightmost cell in row 13 we end with a<br />
blocking instead of a non-blocking, as we did in row 12. Since the original scan<br />
ended with a blocking cell a new scan is NOT started one row further away. We<br />
now have scan 2, 3 and 4 to do the job of scanning the rest of the field of<br />
view. These scans follow the same procedures and rules as the original scan.<br />
<br />
When the scans are done we get this field of view:<br />
<br />
<pre><br />
....ssssss.....ss 16 @ = starting cell<br />
....ssss#..s..ss 15 # = blocking cell<br />
...ssss#..s..ss 14 . = non-blocking cell<br />
...ss##..#..## 13 s = shadowed cells<br />
...##........ 12<br />
............ 11<br />
........... 10<br />
.......... 9<br />
......... 8<br />
........ 7<br />
....... 6<br />
...... 5<br />
..... 4<br />
.... 3<br />
... 2<br />
.. 1<br />
@<br />
</pre><br />
<br />
This procedure is repeated on the other octants, thus producing a complete<br />
field of view. An implementation along with source and DOS executable can<br />
be found here.<br />
<br />
Copyright 2001 Bj&ouml;rn Bergstr&ouml;m<br />
bjorn.bergstrom@roguelikedevelopment.org<br />
<br />
==Implementations==<br />
A Java implementation of the improved version: [[Improved Shadowcasting in Java]].<br />
<br />
An [[PythonShadowcastingImplementation|implementation]] of this algorithm in Python.<br />
<br />
Another [[Ruby shadowcasting implementation|implementation]] in Ruby.<br />
<br />
[[C++ shadowcasting implementation|Another one]] in C++.<br />
<br />
[http://nemonon.de/blog/?p=10 ActionScript 3 implementation]<br />
<br />
[[Category:LOS]][[Category:FOV]]</div>Deejhttp://roguebasin.com/index.php?title=FOV_using_recursive_shadowcasting_-_improved&diff=36006FOV using recursive shadowcasting - improved2013-08-06T00:22:45Z<p>Deej: added java implementation</p>
<hr />
<div>Code and improvement for recursive shadowcasting - Henri Hakl<br />
<br />
==Introduction==<br />
<br />
This text expands the article by Bj&ouml;rn Bergstr&ouml;m called "FOV using recursive<br />
shadowcasting". The article in question is excellent and describes one of the<br />
best visibility determination algorithms for roguelike environments.<br />
<br />
The reader is encouraged to read Bj&ouml;rn's [[FOV_using_recursive_shadowcasting|article on LOS]], as this text assumes that the<br />
reader knows the method described. This text offers a subtle improvement to the<br />
algorithm as well as pseudocode. The improvement is primarily one that allows<br />
a more elegant representation, it does not influence the efficiency of the<br />
algorithm.<br />
<br />
To outline, Bj&ouml;rn describes an improvement to Gordon Lipford's shadowcasting<br />
article [[Computing LOS for Large Areas]] by making use of recursive computation.<br />
Shadowcasting divides the Field of View (FOV) into eight sections and traces<br />
the rows or columns in the sections according to simple laws that ensure that<br />
a minimum of cells need to be investigated: Cells determined to be in shadow<br />
are skipped and cells are generally only visited once (with possible exception<br />
of cells on the boundaries of sections).<br />
<br />
Bj&ouml;rn proceeds to explain finer mechanics in considerable detail and with well<br />
drawn ASCII art. He omits to offer code in the article, but on-site resources<br />
offer an implementation that should suffice for many.<br />
<br />
==Improvement==<br />
<br />
Each recursion in the algorithm described by Bj&ouml;rn loops through rows/columns<br />
until a break condition is met (row/column ends with obstruction). This works<br />
because any regions closer to the starting point are already finished, and<br />
areas further away are (if appropriate) handled by recursive calls to the<br />
shadowcasting code.<br />
<br />
For the sake of elegance this breaking condition can be handled differently:<br />
Instead of looping if the break-condition isn't met, it facilitates code<br />
readability to simply create a recursive call to the shadowcaster. The change<br />
does not influence things on an efficiency level, however it does clean up the<br />
code somewhat.<br />
<br />
Partial pseudocode, describes one octant:<br />
<pre><br />
Scan(depth, startslope, endslope)<br />
<br />
init y<br />
init x<br />
<br />
while current_slope has not reached endslope do<br />
if (x,y) within visual range then<br />
if (x,y) blocked and prior not blocked then<br />
Scan(depth + 1, startslope, new_endslope)<br />
if (x,y) not blocked and prior blocked then<br />
new_startslope<br />
set (x,y) visible<br />
progress (x,y)<br />
<br />
regress (x,y)<br />
<br />
if depth < visual range and (x,y) not blocked<br />
Scan(depth + 1, startslope, endslope)<br />
end<br />
</pre><br />
<br />
==Improved Java Implementation==<br />
{{:Improved Shadowcasting in Java}}<br />
<br />
==Pascal Implementation==<br />
The following code excerpt comes from my own implementation in [[Turbo Pascal]]:<br />
<br />
* mv -> global describing view distance<br />
* mw -> mv * mv<br />
<br />
Octants are divided as follows:<br />
<pre><br />
\ 1 | 2 /<br />
8 3<br />
-- --<br />
7 4<br />
/ 6 | 5 \<br />
</pre><br />
<br />
<div style="background-color: #EEEEEE; border-style: dotted; padding: 0.3em"><br />
<syntaxhighlight lang="pascal"><br />
function GetSlopeStd(x1, y1, x2, y2 : single) : single;<br />
begin<br />
GetSlopeStd := (x1 - x2) / (y1 - y2);<br />
end;<br />
<br />
function GetSlopeInv(x1, y1, x2, y2 : single) : single;<br />
begin<br />
GetSlopeInv := (y1 - y2) / (x1 - x2);<br />
end;<br />
<br />
function GetVisDistance(x1, y1, x2, y2 : integer) : integer;<br />
begin<br />
GetVisDistance := (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);<br />
end;<br />
<br />
procedure RecursiveVisibility(e : PCreature; oct, depth : integer; slopeA, slopeB : single);<br />
var<br />
x, y : integer;<br />
begin<br />
case oct of<br />
1 : begin<br />
y := e^.y - depth; { initialize y }<br />
x := round(e^.x - slopeA * depth); { initialize z }<br />
while GetSlopeStd(x, y, e^.x, e^.y) >= slopeB do begin { while in octant }<br />
if GetVisDistance(x, y, e^.x, e^.y) <= mw then begin { if within max visual range }<br />
if WorldSurface[x, y].entity^.obstruct then begin { if obstruction }<br />
if not WorldSurface[x - 1, y].entity^.obstruct then begin { if no prior obstruction }<br />
RecursiveVisibility(e, 1, depth + 1, slopeA, GetSlopeStd(x - 0.5, y + 0.5, e^.x, e^.y));<br />
end; { ^create recursive scan }<br />
end else begin { no obstruction }<br />
if WorldSurface[x - 1, y].entity^.obstruct then begin { if prior obstruction }<br />
slopeA := GetSlopeStd(x - 0.5, y - 0.5, e^.x, e^.y); { adjust slope for later recursion }<br />
end;<br />
end;<br />
WorldSurface[x, y].visibility := 3; { set block visible }<br />
end;<br />
inc(x);<br />
end;<br />
dec(x)<br />
end;<br />
2 : begin<br />
y := e^.y - depth; { initialize y }<br />
x := round(e^.x + slopeA * depth); { initialize z }<br />
while GetSlopeStd(x, y, e^.x, e^.y) <= slopeB do begin { while in octant }<br />
if GetVisDistance(x, y, e^.x, e^.y) <= mw then begin { if within max visual range }<br />
if WorldSurface[x, y].entity^.obstruct then begin { if obstruction }<br />
if not WorldSurface[x + 1, y].entity^.obstruct then begin { if no prior obstruction }<br />
RecursiveVisibility(e, 2, depth + 1, slopeA, GetSlopeStd(x + 0.5, y + 0.5, e^.x, e^.y));<br />
end; { ^create recursive scan }<br />
end else begin { no obstruction }<br />
if WorldSurface[x + 1, y].entity^.obstruct then begin { if prior obstruction }<br />
slopeA := -GetSlopeStd(x + 0.5, y - 0.5, e^.x, e^.y); { adjust slope for later recursion }<br />
end;<br />
end;<br />
WorldSurface[x, y].visibility := 3; { set block visible }<br />
end;<br />
dec(x);<br />
end;<br />
inc(x)<br />
end;<br />
3 : begin<br />
x := e^.x + depth; { initialize y }<br />
y := round(e^.y + slopeA * depth); { initialize z }<br />
while GetSlopeInv(x, y, e^.x, e^.y) <= slopeB do begin { while in octant }<br />
if GetVisDistance(x, y, e^.x, e^.y) <= mw then begin { if within max visual range }<br />
if WorldSurface[x, y].entity^.obstruct then begin { if obstruction }<br />
if not WorldSurface[x, y - 1].entity^.obstruct then begin { if no prior obstruction }<br />
RecursiveVisibility(e, 3, depth + 1, slopeA, GetSlopeInv(x - 0.5, y - 0.5, e^.x, e^.y));<br />
end; { ^create recursive scan }<br />
end else begin { no obstruction }<br />
if WorldSurface[x, y - 1].entity^.obstruct then begin { if prior obstruction }<br />
slopeA := -GetSlopeInv(x + 0.5, y - 0.5, e^.x, e^.y); { adjust slope for later recursion }<br />
end;<br />
end;<br />
WorldSurface[x, y].visibility := 3; { set block visible }<br />
end;<br />
inc(y);<br />
end;<br />
dec(y)<br />
end;<br />
4 : begin<br />
x := e^.x + depth; { initialize y }<br />
y := round(e^.y + slopeA * depth); { initialize z }<br />
while GetSlopeInv(x, y, e^.x, e^.y) >= slopeB do begin { while in octant }<br />
if GetVisDistance(x, y, e^.x, e^.y) <= mw then begin { if within max visual range }<br />
if WorldSurface[x, y].entity^.obstruct then begin { if obstruction }<br />
if not WorldSurface[x, y + 1].entity^.obstruct then begin { if no prior obstruction }<br />
RecursiveVisibility(e, 4, depth + 1, slopeA, GetSlopeInv(x - 0.5, y + 0.5, e^.x, e^.y));<br />
end; { ^create recursive scan }<br />
end else begin { no obstruction }<br />
if WorldSurface[x, y + 1].entity^.obstruct then begin { if prior obstruction }<br />
slopeA := GetSlopeInv(x + 0.5, y + 0.5, e^.x, e^.y); { adjust slope for later recursion }<br />
end;<br />
end;<br />
WorldSurface[x, y].visibility := 3; { set block visible }<br />
end;<br />
dec(y);<br />
end;<br />
inc(y)<br />
end;<br />
5 : begin<br />
y := e^.y + depth; { initialize y }<br />
x := round(e^.x + slopeA * depth); { initialize z }<br />
while GetSlopeStd(x, y, e^.x, e^.y) >= slopeB do begin { while in octant }<br />
if GetVisDistance(x, y, e^.x, e^.y) <= mw then begin { if within max visual range }<br />
if WorldSurface[x, y].entity^.obstruct then begin { if obstruction }<br />
if not WorldSurface[x + 1, y].entity^.obstruct then begin { if no prior obstruction }<br />
RecursiveVisibility(e, 5, depth + 1, slopeA, GetSlopeStd(x + 0.5, y - 0.5, e^.x, e^.y));<br />
end; { ^create recursive scan }<br />
end else begin { no obstruction }<br />
if WorldSurface[x + 1, y].entity^.obstruct then begin { if prior obstruction }<br />
slopeA := GetSlopeStd(x + 0.5, y + 0.5, e^.x, e^.y); { adjust slope for later recursion }<br />
end;<br />
end;<br />
WorldSurface[x, y].visibility := 3; { set block visible }<br />
end;<br />
dec(x);<br />
end;<br />
inc(x)<br />
end;<br />
6 : begin<br />
y := e^.y + depth; { initialize y }<br />
x := round(e^.x - slopeA * depth); { initialize z }<br />
while GetSlopeStd(x, y, e^.x, e^.y) <= slopeB do begin { while in octant }<br />
if GetVisDistance(x, y, e^.x, e^.y) <= mw then begin { if within max visual range }<br />
if WorldSurface[x, y].entity^.obstruct then begin { if obstruction }<br />
if not WorldSurface[x - 1, y].entity^.obstruct then begin { if no prior obstruction }<br />
RecursiveVisibility(e, 6, depth + 1, slopeA, GetSlopeStd(x - 0.5, y - 0.5, e^.x, e^.y));<br />
end; { ^create recursive scan }<br />
end else begin { no obstruction }<br />
if WorldSurface[x - 1, y].entity^.obstruct then begin { if prior obstruction }<br />
slopeA := -GetSlopeStd(x - 0.5, y + 0.5, e^.x, e^.y); { adjust slope for later recursion }<br />
end;<br />
end;<br />
WorldSurface[x, y].visibility := 3; { set block visible }<br />
end;<br />
inc(x);<br />
end;<br />
dec(x)<br />
end;<br />
7 : begin<br />
x := e^.x - depth; { initialize y }<br />
y := round(e^.y + slopeA * depth); { initialize z }<br />
while GetSlopeInv(x, y, e^.x, e^.y) <= slopeB do begin { while in octant }<br />
if GetVisDistance(x, y, e^.x, e^.y) <= mw then begin { if within max visual range }<br />
if WorldSurface[x, y].entity^.obstruct then begin { if obstruction }<br />
if not WorldSurface[x, y + 1].entity^.obstruct then begin { if no prior obstruction }<br />
RecursiveVisibility(e, 7, depth + 1, slopeA, GetSlopeInv(x + 0.5, y + 0.5, e^.x, e^.y));<br />
end; { ^create recursive scan }<br />
end else begin { no obstruction }<br />
if WorldSurface[x, y + 1].entity^.obstruct then begin { if prior obstruction }<br />
slopeA := -GetSlopeInv(x - 0.5, y + 0.5, e^.x, e^.y); { adjust slope for later recursion }<br />
end;<br />
end;<br />
WorldSurface[x, y].visibility := 3; { set block visible }<br />
end;<br />
dec(y);<br />
end;<br />
inc(y)<br />
end;<br />
8 : begin<br />
x := e^.x - depth; { initialize y }<br />
y := round(e^.y - slopeA * depth); { initialize z }<br />
while GetSlopeInv(x, y, e^.x, e^.y) >= slopeB do begin { while in octant }<br />
if GetVisDistance(x, y, e^.x, e^.y) <= mw then begin { if within max visual range }<br />
if WorldSurface[x, y].entity^.obstruct then begin { if obstruction }<br />
if not WorldSurface[x, y - 1].entity^.obstruct then begin { if no prior obstruction }<br />
RecursiveVisibility(e, 8, depth + 1, slopeA, GetSlopeInv(x + 0.5, y - 0.5, e^.x, e^.y));<br />
end; { ^create recursive scan }<br />
end else begin { no obstruction }<br />
if WorldSurface[x, y - 1].entity^.obstruct then begin { if prior obstruction }<br />
slopeA := GetSlopeInv(x - 0.5, y - 0.5, e^.x, e^.y); { adjust slope for later recursion }<br />
end;<br />
end;<br />
WorldSurface[x, y].visibility := 3; { set block visible }<br />
end;<br />
inc(y);<br />
end;<br />
dec(y)<br />
end;<br />
end;<br />
<br />
if (depth < mv) and not WorldSurface[x, y].entity^.obstruct then begin { break/continue }<br />
RecursiveVisibility(e, oct, depth + 1, slopeA, slopeB);<br />
end;<br />
end;<br />
</syntaxhighlight><br />
</div><br />
<br />
==C# Implementation==<br />
<br />
A C# 3.0 implementation, including source code, of the above algorithm can be found here[http://www.evilscience.co.uk/?p=225].<br />
<br />
[[Category:Articles]][[category:FOV]]</div>Deejhttp://roguebasin.com/index.php?title=Improved_Shadowcasting_in_Java&diff=36005Improved Shadowcasting in Java2013-08-06T00:17:34Z<p>Deej: added article showing short simplified shadowcasting</p>
<hr />
<div>This Shadowcasting algorithm is from [[SquidLib]] by [[Eben Howard]].<br />
<br />
It features a shortened form of the standard recursive algorithm with easy to read notation.<br />
<br />
The Direction.DIAGONALS that is referred to is a list of x and y offsets, which is all combinations of plus and minus 1.<br />
<br />
The RadiusStrategy is an strategy pattern class that allows alternate radius calculations to be used. This allows for circular, square, diamond, or any custom formula for radius.<br />
<br />
<div style="background-color: #EEEEEE; border-style: dotted; padding: 0.3em"><br />
<syntaxhighlight lang="java"><br />
/**<br />
* Calculates the Field Of View for the provided map from the given x, y<br />
* coordinates. Returns a lightmap for a result where the values represent a<br />
* percentage of fully lit.<br />
*<br />
* A value equal to or below 0 means that cell is not in the<br />
* field of view, whereas a value equal to or above 1 means that cell is<br />
* in the field of view.<br />
*<br />
* @param resistanceMap the grid of cells to calculate on where 0 is transparent and 1 is opaque<br />
* @param startx the horizontal component of the starting location<br />
* @param starty the vertical component of the starting location<br />
* @param force the power of the ray<br />
* @param decay how much the light is reduced for each whole integer step in distance<br />
* @param radiusStrategy provides a means to calculate the radius as desired<br />
* @return the computed light grid<br />
*/<br />
public float[][] calculateFOV(float[][] resistanceMap, int startx, int starty, float force, float decay, RadiusStrategy rStrat) {<br />
this.startx = startx;<br />
this.starty = starty;<br />
this.force = force;<br />
this.decay = decay;<br />
this.rStrat = rStrat;<br />
this.resistanceMap = resistanceMap;<br />
<br />
width = resistanceMap.length;<br />
height = resistanceMap[0].length;<br />
lightMap = new float[width][height];<br />
radius = (force / decay);<br />
<br />
lightMap[startx][starty] = force;//light the starting cell<br />
for (Direction d : Direction.DIAGONALS) {<br />
castLight(1, 1.0f, 0.0f, 0, d.deltaX, d.deltaY, 0);<br />
castLight(1, 1.0f, 0.0f, d.deltaX, 0, 0, d.deltaY);<br />
}<br />
<br />
return lightMap;<br />
}<br />
<br />
private void castLight(int row, float start, float end, int xx, int xy, int yx, int yy) {<br />
float newStart = 0.0f;<br />
if (start < end) {<br />
return;<br />
}<br />
boolean blocked = false;<br />
for (int distance = row; distance <= radius && !blocked; distance++) {<br />
int deltaY = -distance;<br />
for (int deltaX = -distance; deltaX <= 0; deltaX++) {<br />
int currentX = startx + deltaX * xx + deltaY * xy;<br />
int currentY = starty + deltaX * yx + deltaY * yy;<br />
float leftSlope = (deltaX - 0.5f) / (deltaY + 0.5f);<br />
float rightSlope = (deltaX + 0.5f) / (deltaY - 0.5f);<br />
<br />
if (!(currentX >= 0 && currentY >= 0 && currentX < this.width && currentY < this.height) || start < rightSlope) {<br />
continue;<br />
} else if (end > leftSlope) {<br />
break;<br />
}<br />
<br />
//check if it's within the lightable area and light if needed<br />
if (rStrat.radius(deltaX, deltaY) <= radius) {<br />
float bright = (float) (1 - (decay * rStrat.radius(deltaX, deltaY) / force));<br />
lightMap[currentX][currentY] = bright;<br />
}<br />
<br />
if (blocked) { //previous cell was a blocking one<br />
if (resistanceMap[currentX][currentY] >= 1) {//hit a wall<br />
newStart = rightSlope;<br />
continue;<br />
} else {<br />
blocked = false;<br />
start = newStart;<br />
}<br />
} else {<br />
if (resistanceMap[currentX][currentY] >= 1 && distance < radius) {//hit a wall within sight line<br />
blocked = true;<br />
castLight(distance + 1, start, leftSlope, xx, xy, yx, yy);<br />
newStart = rightSlope;<br />
}<br />
}<br />
}<br />
}<br />
}<br />
</syntaxhighlight><br />
</div><br />
<br />
[[Category:Articles]][[Category:FOV]]</div>Deejhttp://roguebasin.com/index.php?title=Field_of_Vision&diff=36004Field of Vision2013-08-06T00:01:50Z<p>Deej: fixed link to author's correct page</p>
<hr />
<div>Some of the most important features on roguelikes, including the presentation of the area that surrounds the player character, require to check the visibility of an object from a given point on the map. For example, it may be necessary to know which parts of map are visible from the place the player character is standing to draw those parts of map on the screen.<br />
<br />
There are basically two ways to achieve this; by using [[Line of Sight]] to check all the map squares in range, which is a slow method as it repeats most of the calculations multiple times, or by calculating the [[Field of Vision]] as a whole.<br />
<br />
== Approaches ==<br />
<br />
Some of the most common approaches to field of vision are:<br />
* Light whole level. Just make everything visible, or at least everything close to the player. Many games use this approach and it seems to work.<br />
* Light whole room. This is the approach used by the original [[Rogue]]. You just make the whole room in which the player character is visible, and all other parts of map not visible. When the character is in a corridor, it can only see one square from where he stands, this doesn't require any sophisticated calculations.<br />
* [[Extremely fast simplified LOS]] -- Take advantage of the way most roguelike maps are drawn (square rooms connected with corridors).<br />
* [[FastLOS]] -- precalculated approximate LOS using a bitwise AND. <br />
* [[Ray casting]]<br />
* [[Shadow casting]]<br />
* [[Restrictive Precise Angle Shadowcasting]]<br />
* [[Permissive Field of View]] (new and uncommon)<br />
* [[Digital field of view]] (new and unheard of)<br />
* [[eligloscode|Very simple line of sight pseudo-code.]]<br />
* [[Quick and dirty FOV/LOS]]<br />
<br />
== Refinements ==<br />
<br />
There are other refinements that can be applied to any approach:<br />
* [[An Efficient Observation Algorithm]] may allow fewer squares to be visited.<br />
<br />
== Studies ==<br />
* [[Comparative study of field of view algorithms for 2D grid based worlds]]<br />
<br />
== Available Libraries ==<br />
<br />
* [[SquidLib]] is a [[Java]] library made by [[Eben Howard]] which supports several types of FoV, including translucence properties. The shadowcasting implementation is shorter and easier to read than most other implementations.<br />
* [[libfov]] is a [[C]] library made by [[Blue Puyo]], which supports both circular FoV and Beams using [[Shadow casting]]<br />
* [[permissive-fov]] is a library for both C and C++ written by [[duerig|Jonathon Duerig]]. It uses [[Permissive Field of View]], and supports arbitrary shaping of FoV using visitation masks. It does not support Beams.<br />
* [[libtcod]] is a C/C++/python library which, while not dedicated to fov, contains implementations of basic raycasting, los_rays (a.k.a. diamond raycasting), recursive shadowcasting, restrictive precise angle shadowcasting and precise permissive fov.<br />
* [http://rlforj.sourceforge.net/ rlforj] - Java library featuring several FoV algorithms.<br />
<br />
== See Also ==<br />
<br />
* [[Discussion:Field_of_Vision]]<br />
<br />
[[Category:Articles]][[Category:FOV]]</div>Deejhttp://roguebasin.com/index.php?title=Shadow_casting&diff=36003Shadow casting2013-08-05T23:58:26Z<p>Deej: added SquidLib to list of FoV libraries and link to page showing shadowcasting algorithm in Java from SquidLib</p>
<hr />
<div>==What is Shadow Casting?==<br />
<br />
Shadow casting is a way to implement [[Field of Vision]]. In shadow casting, a destination square is visible from a source square if there exists an unobstructed line from the center of the source square to any point in the destination square. There are several efficient algorithms to accomplish this, including two which only visits squares that are visible ([[Spiral Path FOV]] and [[FOV using recursive shadowcasting]]).<br />
<br />
==Advantages==<br />
<br />
* Moderately easy to implement<br />
* Efficient<br />
* Existing library<br />
<br />
==Disadvantages==<br />
<br />
* Some artifacts (corners of rooms, for example).<br />
* Non-symmetric, making it awkward for some implementations of ranged combat.<br />
<br />
==How do I implement it?==<br />
<br />
* [[Computing LOS for Large Areas]]<br />
* [[FOV using recursive shadowcasting]]<br />
* [[FOV using recursive shadowcasting - improved]]<br />
* [[Improved Shadowcasting in Java]]<br />
* [[Spiral Path FOV]]<br />
* [[Precise Shadowcasting in JavaScript]]<br />
<br />
==What games use it?==<br />
<br />
Most modern games use shadow casting.<br />
<br />
==What libraries implement it?==<br />
<br />
* [[SquidLib]] is a Java library which includes an easy to read recursive shadowcasting algorithm.<br />
* [[libfov]] is a C++ library which implements recursive shadow casting.<br />
* [[Roguelike Library For Java]] provides an implementation of shadow casting in Java.<br />
* [[libtcod]]<br />
* [[rot.js]] implements Precise Shadowcasting<br />
<br />
[[Category:FOV]]</div>Deejhttp://roguebasin.com/index.php?title=Field_of_Vision&diff=36002Field of Vision2013-08-05T23:50:21Z<p>Deej: added SquidLib to list of FoV libraries</p>
<hr />
<div>Some of the most important features on roguelikes, including the presentation of the area that surrounds the player character, require to check the visibility of an object from a given point on the map. For example, it may be necessary to know which parts of map are visible from the place the player character is standing to draw those parts of map on the screen.<br />
<br />
There are basically two ways to achieve this; by using [[Line of Sight]] to check all the map squares in range, which is a slow method as it repeats most of the calculations multiple times, or by calculating the [[Field of Vision]] as a whole.<br />
<br />
== Approaches ==<br />
<br />
Some of the most common approaches to field of vision are:<br />
* Light whole level. Just make everything visible, or at least everything close to the player. Many games use this approach and it seems to work.<br />
* Light whole room. This is the approach used by the original [[Rogue]]. You just make the whole room in which the player character is visible, and all other parts of map not visible. When the character is in a corridor, it can only see one square from where he stands, this doesn't require any sophisticated calculations.<br />
* [[Extremely fast simplified LOS]] -- Take advantage of the way most roguelike maps are drawn (square rooms connected with corridors).<br />
* [[FastLOS]] -- precalculated approximate LOS using a bitwise AND. <br />
* [[Ray casting]]<br />
* [[Shadow casting]]<br />
* [[Restrictive Precise Angle Shadowcasting]]<br />
* [[Permissive Field of View]] (new and uncommon)<br />
* [[Digital field of view]] (new and unheard of)<br />
* [[eligloscode|Very simple line of sight pseudo-code.]]<br />
* [[Quick and dirty FOV/LOS]]<br />
<br />
== Refinements ==<br />
<br />
There are other refinements that can be applied to any approach:<br />
* [[An Efficient Observation Algorithm]] may allow fewer squares to be visited.<br />
<br />
== Studies ==<br />
* [[Comparative study of field of view algorithms for 2D grid based worlds]]<br />
<br />
== Available Libraries ==<br />
<br />
* [[SquidLib]] is a [[Java]] library made by [[Deej | Eben Howard]] which supports several types of FoV, including translucence properties. The shadowcasting implementation is shorter and easier to read than most other implementations.<br />
* [[libfov]] is a [[C]] library made by [[Blue Puyo]], which supports both circular FoV and Beams using [[Shadow casting]]<br />
* [[permissive-fov]] is a library for both C and C++ written by [[duerig|Jonathon Duerig]]. It uses [[Permissive Field of View]], and supports arbitrary shaping of FoV using visitation masks. It does not support Beams.<br />
* [[libtcod]] is a C/C++/python library which, while not dedicated to fov, contains implementations of basic raycasting, los_rays (a.k.a. diamond raycasting), recursive shadowcasting, restrictive precise angle shadowcasting and precise permissive fov.<br />
* [http://rlforj.sourceforge.net/ rlforj] - Java library featuring several FoV algorithms.<br />
<br />
== See Also ==<br />
<br />
* [[Discussion:Field_of_Vision]]<br />
<br />
[[Category:Articles]][[Category:FOV]]</div>Deejhttp://roguebasin.com/index.php?title=Eben_Howard&diff=34562Eben Howard2013-05-14T19:43:08Z<p>Deej: updated to the things I'm currently doing</p>
<hr />
<div>{{developerinfo|name = Eben Howard<br />
|alias = Deej, SquidPony<br />
|nationality = Montanan<br />
|projects = [[SquidLib]], [[libjcsi]]<br />
|games = [[Quarker]], [[Excitable Digger]], [[Earl_Spork|Earl Spork]], [[EmoSquid]], [[Wyrm]], [[Attack The Geth]], [[Epigon]]<br />
|languages = [[Java]], [[C#]], [[Inform 7]], [[Unity 3D]]<br />
|site = http://squidpony.com<br />
}}<br />
<br />
Eben is currently putting together an action RPG in Unity 3D.<br />
<br />
While many previous games were classic style turn based, grid world, ASCII character type roguelikes, his new project is an open world real-time third person affair. Features include crafting, location randomization, and world changes based on player actions. There isn't permadeath, but there are perma-consequences.<br />
<br />
If you are in #rgrd on quakenet you can see him as Eben.<br />
<br />
== Medals ==<br />
http://www.roguetemple.com/medals/Medal_7DRL_2009_s.png http://www.roguetemple.com/medals/Medal_7DRL_2010_s.png http://www.roguetemple.com/medals/Medal_7DRL_2011_s.png http://www.roguetemple.com/medals/Medal_7DRL_2012_s.png http://www.roguetemple.com/medals/Medal_7DRL_2013_s.png<br />
[[Category:Developers]]</div>Deejhttp://roguebasin.com/index.php?title=Deej&diff=34560Deej2013-05-14T19:36:59Z<p>Deej: Deej moved page Deej to Eben Howard: no longer actively using previous nick</p>
<hr />
<div>#REDIRECT [[Eben Howard]]</div>Deejhttp://roguebasin.com/index.php?title=Eben_Howard&diff=34559Eben Howard2013-05-14T19:36:59Z<p>Deej: Deej moved page Deej to Eben Howard: no longer actively using previous nick</p>
<hr />
<div>{{developerinfo|name = Eben Howard<br />
|alias = Deej, SquidPony<br />
|nationality = Montanan<br />
|projects = [[SquidLib]], [[libjcsi]]<br />
|games = [[Quarker]], [[Excitable Digger]], [[Earl_Spork|Earl Spork]], [[EmoSquid]], [[Wyrm]], [[Attack The Geth]], [[Epigon]]<br />
|languages = [[Java]]<br />
|site = http://squidpony.com<br />
}}<br />
<br />
He is in full swing working on [[Epigon]]!<br />
<br />
Also in the works: updating [[SquidLib]] to go beyond basic features.<br />
<br />
If you are on #rgrd you can see him as Eben.<br />
<br />
== Medals ==<br />
http://www.roguetemple.com/medals/Medal_7DRL_2009_s.png http://www.roguetemple.com/medals/Medal_7DRL_2010_s.png http://www.roguetemple.com/medals/Medal_7DRL_2011_s.png http://www.roguetemple.com/medals/Medal_7DRL_2012_s.png http://www.roguetemple.com/medals/Medal_7DRL_2013_s.png<br />
[[Category:Developers]]</div>Deejhttp://roguebasin.com/index.php?title=Eben_Howard&diff=32092Eben Howard2013-04-03T05:21:59Z<p>Deej: added my medal for the 7dRL 2013</p>
<hr />
<div>{{developerinfo|name = Eben Howard<br />
|alias = Deej, SquidPony<br />
|nationality = Montanan<br />
|projects = [[SquidLib]], [[libjcsi]]<br />
|games = [[Quarker]], [[Excitable Digger]], [[Earl_Spork|Earl Spork]], [[EmoSquid]], [[Wyrm]], [[Attack The Geth]], [[Epigon]]<br />
|languages = [[Java]]<br />
|site = http://squidpony.com<br />
}}<br />
<br />
He is in full swing working on [[Epigon]]!<br />
<br />
Also in the works: updating [[SquidLib]] to go beyond basic features.<br />
<br />
If you are on #rgrd you can see him as Eben.<br />
<br />
== Medals ==<br />
http://www.roguetemple.com/medals/Medal_7DRL_2009_s.png http://www.roguetemple.com/medals/Medal_7DRL_2010_s.png http://www.roguetemple.com/medals/Medal_7DRL_2011_s.png http://www.roguetemple.com/medals/Medal_7DRL_2012_s.png http://www.roguetemple.com/medals/Medal_7DRL_2013_s.png<br />
[[Category:Developers]]</div>Deejhttp://roguebasin.com/index.php?title=Attack_The_Geth&diff=31986Attack The Geth2013-03-29T02:14:38Z<p>Deej: updated for new version</p>
<hr />
<div>{{game-7drl| name = Attack The Geth<br />
|developer = [[Deej|Eben Howard]]<br />
|influences = Mass Effect 3 Multiplayer<br />
|released = Mar 17, 2013 (7dRL Edition)<br />
|updated = Mar 28, 2013 (v1.4)<br />
|language = [[Java]] 7<br />
|platforms = any with a JRE<br />
|theme = Enemy Wave Survival<br />
|length = Short<br />
|site = http://squidpony.com/<br />
|licensing = Apache 2.0<br />
|interface = [[SquidLib]]<br />
}}<br />
<br />
A ranged weapons game, based in the Mass Effect universe.<br />
<br />
Your goal is to kill all the Geth!<br />
<br />
Once all the geth on the map are wiped out you'll get the chance to change or upgrade your robot and fight harder geth in the next wave.<br />
<br />
This game uses [[SquidLib]] for the primary display.</div>Deejhttp://roguebasin.com/index.php?title=Attack_The_Geth&diff=31967Attack The Geth2013-03-27T19:52:08Z<p>Deej: </p>
<hr />
<div>{{game-7drl| name = Attack The Geth<br />
|developer = [[Deej|Eben Howard]]<br />
|influences = Mass Effect 3 Multiplayer<br />
|released = Mar 17, 2013 (7dRL Edition)<br />
|updated = Mar 27, 2013 (v1.3)<br />
|language = [[Java]] 7<br />
|platforms = any with a JRE<br />
|theme = Enemy Wave Survival<br />
|length = Short<br />
|site = http://squidpony.com/<br />
|licensing = Apache 2.0<br />
|interface = [[SquidLib]]<br />
}}<br />
<br />
A ranged weapons game, based in the Mass Effect universe.<br />
<br />
Your goal is to kill all the Geth!<br />
<br />
Once all the geth on the map are wiped out you'll get the chance to change or upgrade your robot and fight harder geth in the next wave.<br />
<br />
This game uses [[SquidLib]] for the primary display.</div>Deejhttp://roguebasin.com/index.php?title=Attack_The_Geth&diff=31769Attack The Geth2013-03-20T01:58:39Z<p>Deej: </p>
<hr />
<div>{{game-7drl| name = Attack The Geth<br />
|developer = [[Deej|Eben Howard]]<br />
|influences = Mass Effect 3 Multiplayer<br />
|released = Mar 17, 2013 (7dRL Edition)<br />
|updated = Mar 19, 2013 (v1.1)<br />
|language = [[Java]] 7<br />
|platforms = any with a JRE<br />
|theme = Enemy Wave Survival<br />
|length = Short<br />
|site = http://squidpony.com/<br />
|licensing = Apache 2.0<br />
|interface = [[SquidLib]]<br />
}}<br />
<br />
A ranged weapons game, based in the Mass Effect universe.<br />
<br />
Your goal is to kill all the Geth!<br />
<br />
Once all the geth on the map are wiped out you'll get the chance to change or upgrade your robot and fight harder geth in the next wave.<br />
<br />
This game uses [[SquidLib]] for the primary display.</div>Deejhttp://roguebasin.com/index.php?title=Recently_Updated_Roguelikes&diff=31752Recently Updated Roguelikes2013-03-19T00:38:20Z<p>Deej: added Attack The Geth</p>
<hr />
<div>Roguelike games updated or released in the last 12 months<br />
<br />
When adding a new game to this list, make sure to keep it in alphabetical order.<br />
<br />
{| border="0" style="border: 1px solid #999; background-color:#FFFFFF"<br />
|- align="center" bgcolor="#CCCCCC"<br />
! Name !! Type !! Last update !! Last version !! Based on !! Language<br />
{{Update | #ffffff | ADOM |http://www.ancientdomainsofmystery.com| | {{stable}}{{alpha}} | Fantasy | Sep 16 2012 | 1.2.0p3 | | [[C]] }}<br />
{{Update | #efefef | ADOM II |http://www.ancientdomainsofmystery.com| | {{beta}} | Fantasy | May 20 2012 | 0.2.8 | [[ADOM]] [[JADE]] | [[Java]] }}<br />
{{Update | #ffffff | AliensRL |http://alien.chaosforge.org/| | {{beta}} | Sci-fi | Sep 07 2012 | 0.8.2 | | [[FreePascal]] }}<br />
{{Update | #efefef | Allure of the Stars |http://github.com/Mikolaj/Allure| | {{alpha}} | Sci-fi | Nov 25 2012 | 0.4.6 | | [[Haskell]] }}<br />
{{Update | #ffffff | The ASCII Project |http://www.theasciiproject.com |(MMORPG)| {{alpha}} | Fantasy, Modern, Sci-Fi | Aug 25 2012 | 0.0.0m - Stable | [[Dwarf Fortress]], [http://minecraft.net Minecraft] | [[C]],[[C++]], Mendel }}<br />
{{Update | #efefef | Attack The Geth |http://squidpony.com/computer-games/attack-geth| | {{Alpha}} | Sci Fi | Mar 17 2013 | 7dRL Edition | Mass Effect | [[Java]]}}<br />
{{Update | #efefef | Bardess |http://sites.google.com/sites/bardesstemp/| | {{stable}}{{beta}} | Fantasy, Tactical, Team | Jan 9 2013 | 0.6-2013 | |[[C#]]}}<br />
{{Update | #ffffff | Cursed Dungeons |http://droidgnome.blogspot.se/| | {{beta}} | Fantasy | Jun 06 2012 | 0.1.0 | | [[Java]] }}<br />
{{Update | #efefef | Demonhunt |http://www.demonhunt.org/| | {{Stable}} | Mythology | Dec 24 2011 | 2.0 | | [[Java]] }}<br />
{{Update | #ffffff | Diggr |http://code.google.com/p/diggr-roguelike/| | {{beta}} | Surreal | Feb 25 2012 | v12.02.26 | | [[Python]] }}<br />
{{Update | #efefef | Drakefire Chasm |http://dowhilecompiling.blogspot.com/p/drakefire-chasm.html| | {{Stable}} | Fantasy | Dec 17 2012 | 1.3.1 || [[C++]]}}<br />
{{Update | #ffffff | Earl Spork |http://squidpony.com/games/computer-games/earl-spork/earl-spork-2-0-released-for-arrp/| | {{Stable}} | Food Platformer | Sep 16 2012 | 2.0 | | [[Java]] }}<br />
{{Update | #efefef | Epilogue |http://kraflab.com/epilogue.html| | {{Stable}} | Fantasy | Jan 17 2013 | 2.A | | [[Blitzmax]] }}<br />
{{Update | #ffffff | Fall From Heaven |http://ffhtr.blogspot.com/| then Roguelike | {{alpha}} | Fantasy | Jun 18 2012 | 0.0.9-3 | ELONA | [[Delphi]] }}<br />
{{Update | #efefef | Fame |http://sourceforge.net/projects/untitled-rpg| | {{stable}} | Fantasy | Mar 2 2013 | 0.8.4 | &nbsp; | [[C++]] }}<br />
{{Update | #ffffff | First Age Angband |http://angband.oook.cz/faangband| | {{stable}} | Fantasy | Oct 28 2012 | 1.3 | [[Angband]] | [[C]] }}<br />
{{Update | #efefef | Forays into Norrendrin |http://code.google.com/p/forays-into-norrendrin/downloads/list| | {{stable}} | Fantasy | Dec 09 2012 | 0.7.0 | | [[C Sharp|C#]] }}<br />
{{Update | #ffffff | Herculeum |https://github.com/tuturto/pyherc| | {{alpha}} | Fantasy | Dec 31 2012 | 0.8 | | [[Python]] }}<br />
{{Update | #efefef | Hokuto no Rogue |http://hokuto-no-rogue.sourceforge.net/| | {{alpha}} | Anime | Mar 17 2012 | 0.6.0 | | [[Java]] }}<br />
{{Update | #ffffff | HordeTheory |http://hordetheory.blogspot.com/p/hordetheory_04.html| | {{beta}} | No Setting | Mar 8 2012 | Beta 2 | | [[Game Maker language]] }}<br />
{{Update | #efefef | Ighalsk |http://sourceforge.net/projects/ighalsk/ | | {{alpha}} | Fantasy | Jul 31 2012 | 0.1.16 | | [[Python]] }}<br />
{{Update | #ffffff | Ignite |http://alexbard.org.ua/| | {{alpha}} | Fantasy | Apr 15 2012 | 0.41 | | [[C#]] [[XNA]] }}<br />
{{Update | #efefef | Intelligence: Rae Lives |http://www.github.com/littleglassdiode/irl| | {{alpha}} | Science Fiction | Sep 15 2012 | 0.0.1 | | [[C]] }}<br />
{{Update | #ffffff | Into the Dungeon ++ |http://studio7.guru-gaming.org| | {{beta}} | Fantasy | Feb 24 2012 | 0.7 | | [[Cpp | C++]] }}<br />
{{Update | #efefef | Kerkerkruip |http://lilith.cc/~victor| | {{Stable}} | Fantasy | Dec 29 2012 | 7 | | [[Inform 7]] }}<br />
{{Update | #ffffff | LambdaRogue |http://lambdarogue.net| | {{stable}} | Fantasy/Sci-fi | Jun 10 2012 | 1.6.4 | | [[Free Pascal]], [[SDL]] }}<br />
{{Update | #efefef | Legacy |https://sites.google.com/site/legacydevpage/home| | {{alpha}} | Fantasy | Nov 3 2011 | 0.1.4 | &nbsp; | [[Java]] }}<br />
{{Update | #ffffff | Legend of Siegfried |http://legendofsiegfried.wordpress.com| | {{beta}} | Fantasy | Dec 03 2012 | 0.2.6 | [[ADOM]] | [[C_Sharp | C#]] }}<br />
{{Update | #efefef | Malastro |http://tinyurl.com/c8faodr| | {{beta}} | Modern/Sci-fi | Nov 14 2012 | 1.1 | | [[C_Sharp | C#]] }}<br />
{{Update | #ffffff | MagmaHack |http://weirdrogue.blogspot.com| | {{beta}} | Fantasy | Oct 16 2012 | b3 | | [[Java]] }}<br />
{{Update | #efefef | MidBoss |http://www.midboss.net| | {{beta}} | Fantasy | Feb 3 2013 | 0.5 | | [[Python]] }}<br />
{{Update | #ffffff | Middlecrest |http://sourceforge.net/projects/middlecrest/files/| | {{alpha}} | Fantasy | Nov 11 2011 | 0.2.23 | | [[C]], [[Cpp | C++]], [[Lua]] }}<br />
{{Update | #efefef | Neon |https://sourceforge.net/projects/neon/| | {{alpha}} | Fantasy | Dec 01 2012| 0.4.0 | | [[Java]], [[JavaScript]] }}<br />
{{Update | #ffffff | NitroHack |http://nitrohack.org/| | {{stable}} | Fantasy | Jan 16 2012 | 4.0.0 | [[Nethack]] | [[C]] }}<br />
{{Update | #efefef | NLarn |http://nlarn.sourceforge.net/| | {{beta}} | Fantasy | Jul 6 2012 | 0.7.2 | [[Larn]] | [[C]] }}<br />
{{Update | #ffffff | Noxico |http://helmet.kafuka.org/noxico/| | {{alpha}} | Erotic fantasy | Nov 16 2012| 0.1.14 | | [[CSharp|C#]] }}<br />
{{Update | #efefef | NPPAngband |http://forum.nppangband.org/| | {{stable}} | Fantasy | Mar 19 2012 | 0.5.4 | [[Angband]] | [[C]] }}<br />
{{Update | #ffffff | PWMAngband |http://powerwyrm.monsite-orange.fr/page5/index.html/| | {{stable}} | Fantasy | Oct 05 2012 | 1.1.9 build 3 | [[Angband]] | [[C]] }}<br />
{{Update | #efefef | Red Rogue |http://redrogue.net/| | {{stable}} | Fantasy | Dec 4 2012 | 1.0.1 | &nbsp; | [[AS3]] }}<br />
{{Update | #ffffff | Rogue Survivor |http://roguesurvivor.blogspot.com/| | {{alpha}} | Modern/Sci-Fi | Apr 28 2012 | 9 | &nbsp; | [[C#]] }}<br />
{{Update | #ffffff | Seduction Quest |http://within-the-void.blogspot.com/| | {{alpha}} | Erotic fantasy | Feb 28 2013 | 0.201 | &nbsp; | [[Lua]] }}<br />
{{Update | #efefef | Serial Killer |http://skrdev.blogspot.com/| | {{alpha}} | Modern, Surreal | Apr 14 2012 | 0.2.2 | &nbsp; | [[Java]] }}<br />
{{Update | #ffffff | Shepherd Slaughter |http://blindhack.com/shepherd-slaughter| | {{Stable}} | Fantasy | May 30 2012 | 9.0 || [[Python]]}}<br />
{{Update | #efefef | Sil |http://www.amirrorclear.net/flowers/game/sil/| | {{Stable}} | Fantasy | Jan 03 2013 | 1.1.1 || [[C]]}}<br />
{{Update | #ffffff | @Star Wars |http://caffeineoverdose.me| | {{Alpha}} | Sci-fi | Nov 06 2012 | 0.5a || [[Python]]}}<br />
{{Update | #efefef | The Wizard's Lair |http://www.wizardslair.co.uk| | {{stable}} | Fantasy | Mar 1 2013 | v203 | [[NetHack]], [[Sword of Fargoal]] | [[BlitzMax]] }}<br />
{{Update | #ffffff | TomeNET |http://www.tomenet.net/| (multiplayer) | {{stable}} | Fantasy | Aug 18 2012 | 4.4.9b | MAng,ToME,ZAng,Cth | [[C]],[[Lua]] }}<br />
{{Update | #efefef | ToME |http://tome.te4.org/| | {{stable}}{{beta}} | Fantasy,A | Aug 18 2012 | 4.0.0beta42 | Zangband 2.2.0 | [[C]], [[Lua]], [[OpenGL]] }}<br />
{{Update | #ffffff | Triangle Wizard |http://trianglewizard.webs.com/| | {{stable}} | Fantasy | Nov 20 2012 | R 15.05 | | [[Game Maker language | GML]] }}<br />
{{Update | #efefef | Ultima Ratio Regum |http://www.ultimaratioregum.co.uk/game/| | {{alpha}} | Hist | July 11 2012 | 0.1.2b | | [[Python]] }}<br />
{{Update | #ffffff | UnNetHack |http://sourceforge.net/projects/unnethack/| | {{beta}} | Fantasy,H | Apr 01 2012 | 4.0.0 | Nethack 3.4.3 | [[C]] }}<br />
{{Update | #efefef | UnReal World |http://www.iki.fi/urw/| | {{stable}} | [[Wilderness Survival]],Hist. | Dec 24 2012 | 3.15 | | [[C]], [[C++]] }}<br />
{{Update | #ffffff | Voxel Heroes |http://bigbadwofl.blogspot.com/| | {{alpha}} | Fantasy | Mar 13 2012 | 0.11 | | [[C++]] }}<br />
{{Update | #efefef | Voyage to Farland |http://www.peculiar-games.com/| | {{stable}} | Fantasy | Oct 5 2012 | 1.94 | &nbsp; | [[C]], [[Java]] }}<br />
{{Update | #ffffff | Wayward |http://www.unlok.ca/wayward/| | {{beta}} | [[Wilderness Survival]] | Mar 16 2013 | Beta 1.1 | | [[HTML5]], [[JavaScript]] }}<br />
{{Update | #efefef | WazHack |http://www.wazhack.com/| | {{beta}} | Fantasy | Mar 24 2012 | Beta 3 | [[NetHack]] | [[C#]], [[JavaScript]] }}<br />
{{Update | #ffffff | World of Tey |http://www.forgottenplanet.com/caillan/tey/index.html| | {{alpha}} | Original Fantasy | Feb 29 2012 | 0.13.0 | XirrelaiRPG | [[Game Maker language|GML]] }}<br />
{{Update | #efefef | X@COM |http://xcomrl.blogspot.com| | {{stable}}{{alpha}} | Sci-fi | Feb 6 2013 | 0.16.130206r8.7 | X-COM | [[C++]] }}<br />
{{Update | #ffffff | Zero-Player Game |http://iniquitatis.narod.ru/zpg/zpg_en.html| | {{stable}} | Fantasy | Mar 4 2013 | Build 49 | | [[FreeBASIC]]}}<br />
|}<br />
<br />
Type: Fantasy, Sci-fi, Modern, Anime, Surreal, Hist. = Historical, A = Angband variant, H = Hack variant, R = Rogue variant, 7 = (originally) 7DRL or similar<br />
<br />
<br />
[[Recently Updated Roguelikes/archive]]<br />
<br />
[[Category:Main]]</div>Deejhttp://roguebasin.com/index.php?title=News&diff=31751News2013-03-19T00:27:42Z<p>Deej: added Attack The Geth</p>
<hr />
<div><!-- Add new news to the top --><br />
<!-- Don't forget to update Recently Updated Roguelikes. --><br />
* 17 Mar 2013 - [[Attack The Geth]] ''7DRL'' [http://squidpony.com/computer-games/attack-geth/ released]<br />
* 17 Mar 2013 - [[AscentRL]] ''7DRL'' [http://tritax.blogspot.com/2013/03/ascentrl-7drl-success.html released]<br />
* 17 Mar 2013 - [[Dead Man Walking]] ''7DRL'' [http://www.caffeineoverdose.me/2013/03/dead-man-walking-7drl-release-download.html released]<br />
* 17 Mar 2013 - [[Dungeon Fray]] 0.7 [http://www.dungeonfray.com/2013/03/version-07-update.html released]<br />
* 16 Mar 2013 - [[Dungeon-Themed Starvation Simulator!]] 7DRL [http://roguetemple.com/forums/index.php?topic=3130.0 released]<br />
* 16 Mar 2013 - [[Wayward]] Beta 1.1 [http://www.unlok.ca/wayward/wayward-beta-1-1-released/ released]<br />
* 16 Mar 2013 - [[Uushuvud]] ''7DRL'' [http://subterranean-ether.blogspot.com/2013/03/7drl-challenge-2013-uushuvud-end-of-day.html released]<br />
* 16 Mar 2013 - [[Rasatala]] ''7DRL'' [http://sites.google.com/site/rasatalarl/ released]<br />
* 14 Mar 2013 - [[Dungeon Fray]] 0.5 [http://www.dungeonfray.com/2013/03/dungeon-fray-05-update.html released]<br />
* 13 Mar 2013 - [[ToME]] 1.0.1 "Nature's Wrath" [http://te4.org/blogs/darkgod/2013/03/news/tales-majeyal-101-aka-natures-wrath released]<br />
* 11 Mar 2013 - [[Chambers RL]] 1.0 [http://www.ticalc.org/archives/files/fileinfo/452/45229.html released]<br />
* 9 Mar 2013 - [[Dungeon Fray]] 0.4 [http://www.dungeonfray.com/2013/03/dungeon-fray-04-update-and-launch.html released]<br />
* 8 Mar 2013 - [[The Endless Dungeons]] 1.00a [http://sourceforge.net/projects/endlessdungeons/ released]<br />
* 6 Mar 2013 - [[Voyage to Farland]] 1.0.7CWS [http://goo.gl/aWMWY released]<br />
* 5 Mar 2013 - [[CataclysmDDA| Cataclysm: Dark Days Ahead]] 0.2 [http://www.cataclysmdda.com/smf/index.php?topic=351.0 released]<br />
* 4 Mar 2013 - [[Zero-Player Game]] build 49 [http://iniquitatis.narod.ru/zpg/zpg_en.html released]<br />
* 3 Mar 2013 - [[NotEye]] v6.7 and [[Hydra Slayer]] v14.7 [http://zenorogue.blogspot.com/2013/03/noteye-67-hydra-slayer-147-first-person.html released]<br />
* 2 Mar 2013 - [[Fame]] 0.8.4 [https://sourceforge.net/p/untitled-rpg/blog/ released]<br />
* 2 Mar 2013 - [[Pixel Dungeon]] v 0.3.2 [https://play.google.com/store/apps/details?id=com.watabou.pixeldungeon released]<br />
* 1 Mar 2013 - [[The Wizard's Lair]] release 1(v203) [http://www.wizardslair.co.uk released]<br />
<br />
<br />
<div style="text-align:right"><br />
''See also: [[Old news]], [[Recently Updated Roguelikes]]''<br />
</div><br />
<br />
[[Category:Main]]</div>Deejhttp://roguebasin.com/index.php?title=Eben_Howard&diff=31705Eben Howard2013-03-18T03:33:38Z<p>Deej: added my 7dRL</p>
<hr />
<div>{{developerinfo|name = Eben Howard<br />
|alias = Deej, SquidPony<br />
|nationality = Montanan<br />
|projects = [[SquidLib]], [[libjcsi]]<br />
|games = [[Quarker]], [[Excitable Digger]], [[Earl_Spork|Earl Spork]], [[EmoSquid]], [[Wyrm]], [[Attack The Geth]], [[Epigon]]<br />
|languages = [[Java]]<br />
|site = http://squidpony.com<br />
}}<br />
<br />
He is in full swing working on [[Epigon]]!<br />
<br />
Also in the works: updating [[SquidLib]] to go beyond basic features.<br />
<br />
If you are on #rgrd you can see him as Eben.<br />
<br />
== Medals ==<br />
http://www.roguetemple.com/medals/Medal_7DRL_2009_s.png - http://www.roguetemple.com/medals/Medal_7DRL_2010_s.png http://www.roguetemple.com/medals/Medal_7DRL_2011_s.png http://www.roguetemple.com/medals/Medal_7DRL_2012_s.png<br />
[[Category:Developers]]</div>Deejhttp://roguebasin.com/index.php?title=Attack_The_Geth&diff=31704Attack The Geth2013-03-18T03:32:54Z<p>Deej: Created page with "{{game-7drl| name = Attack The Geth |developer = Eben Howard |influences = Mass Effect 3 Multiplayer |released = Mar 17, 2013 (7dRL Edition) |updated = Mar 17, 2013 (..."</p>
<hr />
<div>{{game-7drl| name = Attack The Geth<br />
|developer = [[Deej|Eben Howard]]<br />
|influences = Mass Effect 3 Multiplayer<br />
|released = Mar 17, 2013 (7dRL Edition)<br />
|updated = Mar 17, 2013 (7dRL Edition)<br />
|language = [[Java]] 7<br />
|platforms = any with a JRE<br />
|theme = Enemy Wave Survival<br />
|length = Short<br />
|site = http://squidpony.com/<br />
|licensing = Apache 2.0<br />
|interface = [[SquidLib]]<br />
}}<br />
<br />
A ranged weapons game, based in the Mass Effect universe.<br />
<br />
Your goal is to kill all the Geth!<br />
<br />
Once all the geth on the map are wiped out you'll get the chance to change or upgrade your robot and fight harder geth in the next wave.<br />
<br />
This game uses [[SquidLib]] for the primary display.</div>Deejhttp://roguebasin.com/index.php?title=7DRL_Challenge_2013&diff=317027DRL Challenge 20132013-03-18T03:13:06Z<p>Deej: updated the name for my game</p>
<hr />
<div><div style="float:right;margin:0 6px">http://www.roguetemple.com/7drl/2011/img/committee.png</div><br />
<br />
The 2013 [[Seven Day Roguelike Challenge]] invites developers to produce a complete roguelike game in seven short days. It will be held between March 9th and March 17th of 2013. [http://7drl.roguetemple.com Register your game now!]<br />
<br />
== Links ==<br />
<br />
* [http://roguebasin.roguelikedevelopment.org/index.php?title=7DRL Rules and FAQ] for the Seven Day Roguelike Challenge<br />
* [https://groups.google.com/forum/?fromgroups#!topic/rec.games.roguelike.development/1Nkdg6A33OM Announcement] from Jeff Lait on RGRD<br />
* [http://7drl.roguetemple.com Registration] - Registration page for the event, with screenshot uploading and linking to blogs/declaration.<br />
* [http://groups.google.com/group/rec.games.roguelike.development RGRD], Backup if the registration page fails.<br />
* [http://7drl.org 7drl.org] — A community blog for the 7DRL Challenge.<br />
* [http://www.facebook.com/events/539172886103181/] - Facebook event page<br />
* [http://www.roguetemple.com Rogue Temple], where 7DRLs made in this year's challenge will be evaluated.<br />
* [http://www.roguetemple.com/forums Rogue Temple forums], for general roguelike-y discussion<br />
* [[Chat_room| RGRD irc channel]], where a lot of the participants hang out during the challenge.<br />
* [http://7drl2013.eventbrite.com/ London post-7DRL meet] on the last evening of the challenge to play each other's games or weep into our beers about failures<br />
<br />
== Competition tags ==<br />
<br />
On Wordpress, entries are using the tag ''7DRL 2013'' for related blog posts. On Twitter and G+, consider using the hashtag #7DRL2013 for your competition related status updates. Many people involved in the One Game a Month challenge are making 7DRLs under the Twitter hashtag of #1GAM.<br />
<br />
== Unity licenses ==<br />
<br />
Unity have offered free one-month trials of Unity Pro to people making 7DRLs. Unity is a popular game-making engine that allows you to export to desktops and mobile devices. If you want a trial code please e-mail darrenjohngrey at hotmail.com.<br />
<br />
== The Challengers ==<br />
<br />
(See [http://7drl.roguetemple.com 7drl.roguetemple.com] for the new roguelike registration system.)<br />
<br />
* [[User:Deej|Eben Howard]] - [[Attack The Geth]]<br />
* [[User:Darren Grey|Darren Grey]] - Mosaic<br />
* [[User:Tanthie|Tanthie]] - Rogue Effect - [http://dowhilecompiling.blogspot.fi/2013/03/7drl-2013-failure.html failed]<br />
* [[User:magikmw|Michał Walczak]] - Stabby<br />
* [[User:st33d|Aaron Steed]] - Super Mario RL<br />
* [[User:trogrd|Craig Turner]] - Ghost Orchid - failed<br />
* [[User:XLambda|XLambda]] - hproguelike<br />
* [[User:Shalinor|Megan Fox]] - Moulin Rougelike<br />
* [[Samelinux|Luca Giacometti]] - (no name)<br />
* [[User:Amonif|Grimm Bros]] - Dungeon X: Flesh Wound<br />
* [[User:Lundquist|David Wright]] (I am an idiot) - Overworld Survivor Zed<br />
* [[User:mtrc|Michael Cook]] - A Rogue Dream<br />
* [[User:unosoid|Elliot Bonneville]] - Rogue's Labrynth<br />
* [[User:megabuster|megabuster]] - (no name)<br />
* [[User:IcarusTyler|Matthias Zarzecki]] - The Acheron (working title)<br />
* [[User:Conquerd|Epic Fail Inc.]] - [No title yet.]<br />
* [[User:Benjamin|Benjamin Soulé]] - Kali's Ladder<br />
* SRD - The Time Travel Trickery Tshallenge's Temporal Tumbledryer<br />
* [[User:Fillest|Philipp "fillest" Saveliev]] - (unnamed) - tower defense roguelike - failed ([https://github.com/fillest/7drl2013/wiki/Retrospective retrospective])<br />
* [[User:Ekolis|Ed Kolis]] - TriQuest<br />
* Ivana Hertzeu - [[Friendly Meddling]]<br />
* [[User:Roocey|Andrew Wright]] - [[Dead Man Walking]] - success<br />
* [[User:Edenicholas|Edwin DeNicholas]] - Live as Long as Possible<br />
* [[User:Potsticker|Adam J. Piskel]] - SkullDorado<br />
* [[User:Erenan|Luke Simpson]] - Uushuvud<br />
* [[IBOL]] - [[88 Pages]] [download - http://forumfiles.thegamecreators.com/download/2441692]<br />
* [[User:Tndwolf|Luca Carbone]] - [[Infection]]<br />
* [[User:Ido|Ido Yehieli]] - [http://tametick.com/fisticuffs/ Fisticuffsmanship]<br />
[[Category:Events]]<br />
* [[User:ludamad|Adam Domurad]] [[http://adam-dev-blog.blogspot.ca/2013/03/7day-roguelike-challenge-complete.html Bughack]]<br />
* [[User:GuyNamedJoe|GuyNamedJoe]] - [[http://roguetemple.com/forums/index.php?topic=3130.0 Dungeon-Themed Starvation Simulator!]]</div>Deejhttp://roguebasin.com/index.php?title=7DRL_Challenge_2013&diff=315017DRL Challenge 20132013-03-07T18:44:52Z<p>Deej: added my project</p>
<hr />
<div><div>http://www.roguetemple.com/7drl/2011/img/committee.png</div><br />
<br />
The 2013 [[Seven Day Roguelike Challenge]] invites developers to produce a complete roguelike game in seven short days. It will be held between March <br />
9th and March 17th of 2013!<br />
<br />
== Links ==<br />
<br />
* [http://roguebasin.roguelikedevelopment.org/index.php?title=7DRL Rules and FAQ] for the Seven Day Roguelike Challenge<br />
* [https://groups.google.com/forum/?fromgroups#!topic/rec.games.roguelike.development/1Nkdg6A33OM Announcement] from Jeff Lait on RGRD<br />
* [http://7drl.roguetemple.com Registration] - Registration page for when it starts.<br />
* [http://groups.google.com/group/rec.games.roguelike.development RGRD], Backup if the registration page fails.<br />
* [http://7drl.org 7drl.org] — A community blog for the 7DRL Challenge.<br />
* [http://www.facebook.com/events/539172886103181/] - Facebook event page<br />
* [http://www.roguetemple.com Rogue Temple], where 7DRLs made in this year's challenge will be evaluated.<br />
* [http://www.roguetemple.com/forums Rogue Temple forums], for general roguelike-y discussion<br />
* [[Chat_room| RGRD irc channel]], where a lot of the participants hang out during the challenge.<br />
* [http://7drl2013.eventbrite.com/ London post-7DRL meet] on the last evening of the challenge to play each other's games or weep into our beers about failures<br />
<br />
== Competition tags ==<br />
<br />
On Wordpress, entries are using the tag ''7DRL 2013'' for related blog posts. On Twitter and G+, consider using the hashtag #7DRL2013 for your competition related status updates. Many people involved in the One Game a Month challenge are making 7DRLs under the Twitter hashtag of #1GAM.<br />
<br />
== Unity licenses ==<br />
<br />
Unity have offered free one-month trials of Unity Pro to people making 7DRLs. Unity is a popular game-making engine that allows you to export to desktops and mobile devices. If you want a trial code please e-mail darrenjohngrey at hotmail.com.<br />
<br />
== The Challengers ==<br />
<br />
* [[User:Deej|Eben Howard]] - A Well Lit Roguelike (Working Title)<br />
* [[User:Darren Grey|Darren Grey]] - Mosaic<br />
* [[User:Tanthie|Tanthie]] - Nadir Station<br />
* [[User:magikmw|Michał Walczak]] - Stabby<br />
* [[User:st33d|Aaron Steed]] - Super Mario RL<br />
* [[User:trogrd|Craig Turner]] - The Orchid Thief<br />
* [[User:XLambda|XLambda]] - (no name yet)<br />
* [[User:Shalinor|Megan Fox]] - Moulin Rougelike<br />
* [[Samelinux|Luca Giacometti]] - (no name)<br />
* [[User:Amonif|Grimm Bros]] - Dungeon X: Flesh Wound<br />
* [[User:Lundquist|David Wright]] (I am an idiot) - Overworld Survivor Zed<br />
* [[User:mtrc|Michael Cook]] - A Rogue Dream<br />
* [[User:unosoid|Elliot Bonneville]] - Rogue's Labrynth<br />
* [[User:megabuster|megabuster]] - (no name)<br />
* SRD - The Time Travel Trickery Tshallenge's Temporal Tumbledryer<br />
[[Category:Events]]</div>Deejhttp://roguebasin.com/index.php?title=News&diff=31141News2013-01-29T20:34:41Z<p>Deej: updated wording to clearly indicate SquidLib as a library and not a game</p>
<hr />
<div><!-- Add new news to the top --><br />
<!-- Don't forget to update Recently Updated Roguelikes. --><br />
* 29 Jan 2013 - Java library [[SquidLib]] v1.95 stable [http://squidpony.com/not-games/squidlib/squidlib-version-1-95-released/ released]<br />
* 27 Jan 2013 - [[Fame]] 0.8.3 [https://sourceforge.net/p/untitled-rpg/blog/ released]<br />
* 20 Jan 2013 - [[CataclysmDDA|Cataclysm: Dark Days Ahead]] update [http://www.cataclysm.glyphgryph.com/smf/index.php?board=5.0 released!]<br />
* 20 Jan 2013 - [[Rogue's Tale]] v1.01 [http://rogue.epixx.org released!]<br />
* 19 Jan 2013 - [[Wayward]] Beta 1.0 [http://www.unlok.ca/wayward/ released]<br />
* 18 Jan 2013 - [[Morf]] 0.2 [http://bigbadwofl.blogspot.com/2013/01/morf-alpha-version.html released]<br />
* 17 Jan 2013 - [[Epilogue]] v2.A [http://kraflab.com/blog/?page_id=16 released]<br />
* 15 Jan 2013 - [[Halls of Mist]] v1.3.2 [http://angband.oook.cz/forum/showpost.php?p=76376&postcount=1 released!]<br />
* 13 Jan 2013 - [[TomeNET]] v4.5.2 [http://www.tomenet.net released!]<br />
* 13 Jan 2013 - [[Rogue's Souls]] v0.86 [http://forums.tigsource.com/index.php?topic=26781.0 released!]<br />
* 11 Jan 2013 - [[Pixel Dungeon]] 0.2 [http://pixeldungeon.watabou.ru/ released]<br />
* 11 Jan 2013 - [[Morf]] 0.1 [http://bigbadwofl.blogspot.com/2013/01/morf.html released]<br />
* 10 Jan 2013 - [[Witchavenrl|Witchaven the Roguelike]] v0.9b5 [http://asciirealm.blogspot.com.es/2013/01/witchavenrl-beta5-released.html released!]<br />
* 09 Jan 2013 - [[Bardess]] 0.6-2013 [https://sites.google.com/site/bardesstemp released]<br />
* 08 Jan 2013 - [[Voyage to Farland]] 1.99 [http://www.peculiar-games.com/voyage-to-farland released]<br />
* 08 Jan 2013 - [[Bronze and Faith]] 0.1 [http://www.bronzeandfaith.com released]<br />
* 07 Jan 2013 - [[X@COM]] R8.3 (Fantasy X-COM) [http://xcomrl.blogspot.com/2013/01/fantasy-x-com.html released]<br />
* 03 Jan 2013 - [[Epilogue]] v2.99b [http://kraflab.com/blog/?page_id=16 released]<br />
* 03 Jan 2013 - [[Sil]] 1.1.1 [http://roguetemple.com/forums/index.php?topic=2910.0 released]<br />
* 01 Jan 2013 - [[Epilogue]] v2.99 [http://kraflab.com/blog/?page_id=16 released]<br />
* 01 Jan 2013 - [[ADOM II]] 0.3.2 [http://www.ancientdomainsofmystery.com/2013/01/a-happy-new-year-to-you-all-adom-ii-032.html released]<br />
<br />
<br />
<div style="text-align:right"><br />
''See also: [[Old news]], [[Recently Updated Roguelikes]]''<br />
</div><br />
<br />
[[Category:Main]]</div>Deejhttp://roguebasin.com/index.php?title=News&diff=31140News2013-01-29T20:28:51Z<p>Deej: added release announcement for SquidLib v1.95</p>
<hr />
<div><!-- Add new news to the top --><br />
<!-- Don't forget to update Recently Updated Roguelikes. --><br />
* 29 Jan 2013 - [[SquidLib]] v1.95 stable [http://squidpony.com/not-games/squidlib/squidlib-version-1-95-released/ released]<br />
* 27 Jan 2013 - [[Fame]] 0.8.3 [https://sourceforge.net/p/untitled-rpg/blog/ released]<br />
* 20 Jan 2013 - [[CataclysmDDA|Cataclysm: Dark Days Ahead]] update [http://www.cataclysm.glyphgryph.com/smf/index.php?board=5.0 released!]<br />
* 20 Jan 2013 - [[Rogue's Tale]] v1.01 [http://rogue.epixx.org released!]<br />
* 19 Jan 2013 - [[Wayward]] Beta 1.0 [http://www.unlok.ca/wayward/ released]<br />
* 18 Jan 2013 - [[Morf]] 0.2 [http://bigbadwofl.blogspot.com/2013/01/morf-alpha-version.html released]<br />
* 17 Jan 2013 - [[Epilogue]] v2.A [http://kraflab.com/blog/?page_id=16 released]<br />
* 15 Jan 2013 - [[Halls of Mist]] v1.3.2 [http://angband.oook.cz/forum/showpost.php?p=76376&postcount=1 released!]<br />
* 13 Jan 2013 - [[TomeNET]] v4.5.2 [http://www.tomenet.net released!]<br />
* 13 Jan 2013 - [[Rogue's Souls]] v0.86 [http://forums.tigsource.com/index.php?topic=26781.0 released!]<br />
* 11 Jan 2013 - [[Pixel Dungeon]] 0.2 [http://pixeldungeon.watabou.ru/ released]<br />
* 11 Jan 2013 - [[Morf]] 0.1 [http://bigbadwofl.blogspot.com/2013/01/morf.html released]<br />
* 10 Jan 2013 - [[Witchavenrl|Witchaven the Roguelike]] v0.9b5 [http://asciirealm.blogspot.com.es/2013/01/witchavenrl-beta5-released.html released!]<br />
* 09 Jan 2013 - [[Bardess]] 0.6-2013 [https://sites.google.com/site/bardesstemp released]<br />
* 08 Jan 2013 - [[Voyage to Farland]] 1.99 [http://www.peculiar-games.com/voyage-to-farland released]<br />
* 08 Jan 2013 - [[Bronze and Faith]] 0.1 [http://www.bronzeandfaith.com released]<br />
* 07 Jan 2013 - [[X@COM]] R8.3 (Fantasy X-COM) [http://xcomrl.blogspot.com/2013/01/fantasy-x-com.html released]<br />
* 03 Jan 2013 - [[Epilogue]] v2.99b [http://kraflab.com/blog/?page_id=16 released]<br />
* 03 Jan 2013 - [[Sil]] 1.1.1 [http://roguetemple.com/forums/index.php?topic=2910.0 released]<br />
* 01 Jan 2013 - [[Epilogue]] v2.99 [http://kraflab.com/blog/?page_id=16 released]<br />
* 01 Jan 2013 - [[ADOM II]] 0.3.2 [http://www.ancientdomainsofmystery.com/2013/01/a-happy-new-year-to-you-all-adom-ii-032.html released]<br />
<br />
<br />
<div style="text-align:right"><br />
''See also: [[Old news]], [[Recently Updated Roguelikes]]''<br />
</div><br />
<br />
[[Category:Main]]</div>Deejhttp://roguebasin.com/index.php?title=SquidLib&diff=31139SquidLib2013-01-29T20:26:29Z<p>Deej: updated for new stable release</p>
<hr />
<div>{{library| name = SquidLib<br />
|developer = [[user:Deej|Eben Howard]]<br />
|released = Nov. 23rd, 2011<br />
|updated = Jan. 29th, 2013<br />
|dependencies = Java 7<br />
|status = In Active Development<br />
|licensing = [[Apache 2.0]]<br />
|language = [[Java]]<br />
|platforms = [[Unix]], [[Linux]], [[Mac OS X]], [[Windows]]<br />
|site = https://github.com/SquidPony/SquidLib<br />
}}<br />
<br />
===SquidLib is a Java library that provides a full featured toolbox for working with turn based games in Swing and [[libGDX]].===<br />
<br />
SquidLib is used for [[Wyrm]] and [[Epigon]]. The most recent stable version is v1.95, available as a zip file at the github repository.<br />
<br />
===Current Features===<br />
*Ease Of Use<br />
**Standard GUI notation of (x,y) locations within the grid.<br />
**Uses Swing or libGDX<br />
**Any Font can be used<br />
**Images may be used alongside characters in same panel<br />
***Characters can be used as a drop-in fallback mechanism!<br />
**Specify Grid and Font size multiple ways<br />
***Set number of cells in the grid and Font to be used<br />
****Size of cell is adjusted to optimally fit the Font size given<br />
***Set size of the cell, number of cells in the grid, and Font to be used<br />
****Font is dynamically resized to fit optimally within the cell<br />
**Font size and style can be changed on the fly<br />
**Standard JComponent that meets JavaBean requirements for use with NetBeans built-in GUI Builder<br />
**Multiple grids of different configurations can be used simultaneously in the same display<br />
**Basic Swing animation support<br />
*Lots of Color<br />
**Foreground and Background can be set individually on a per-cell basis<br />
**SColor class extends Color and can be used as a drop-in replacement for any awt.Color needs<br />
**SColor chooser included to visually select named and adjusted colors<br />
**Over 500 named colors<br />
**Automatic color caching minimizes memory overhead<br />
**Can get a list of colors that are a gradient between two colors<br />
**Can perform LIBTCOD style "dark", "light", and "desaturate" commands on any color<br />
**Can get an arbitrary amount of blend between two colors<br />
*Roguelike Specific Toolkit<br />
**Robust Field of View system<br />
*Fully Documented API<br />
**Each named color has a sample of its appearance in the Javadoc against multiple backgrounds<br />
***HTML browsing of the API shows these samples<br />
***Pop-up javadoc in NetBeans and Eclipse show these samples<br />
**Demos of all functionality included<br />
*Math Toolkit<br />
**Custom extension of Random allows drop-in replacement with added features<br />
**Able to find Bresenham Line for 2D and 3D coordinates.<br />
<br />
<br />
GitHub repository: https://github.com/SquidPony/SquidLib<br />
<br />
Blog updates: http://squidpony.com/not-games/squidlib/<br />
<br />
Developed by [[Deej|Eben Howard]]<br />
<br />
[[Category:Developing]]</div>Deejhttp://roguebasin.com/index.php?title=SquidLib&diff=31111SquidLib2013-01-24T09:31:50Z<p>Deej: updated to reflect newest features</p>
<hr />
<div>{{library| name = SquidLib<br />
|developer = [[user:Deej|Eben Howard]]<br />
|released = Nov. 23rd, 2011<br />
|updated = Jan. 24th, 2013<br />
|dependencies = Java 7<br />
|status = In Active Development<br />
|licensing = [[Apache 2.0]]<br />
|language = [[Java]]<br />
|platforms = [[Unix]], [[Linux]], [[Mac OS X]], [[Windows]]<br />
|site = https://github.com/SquidPony/SquidLib<br />
}}<br />
<br />
===SquidLib is a Java library that provides a full featured toolbox for working with turn based games in Swing and [[libGDX]].===<br />
<br />
SquidLib is used for [[Wyrm]] and [[Epigon]].<br />
<br />
===Current Features===<br />
*Ease Of Use<br />
**Standard GUI notation of (x,y) locations within the grid.<br />
**Uses Swing or libGDX<br />
**Any Font can be used<br />
**Images may be used alongside characters in same panel<br />
***Characters can be used as a drop-in fallback mechanism!<br />
**Specify Grid and Font size multiple ways<br />
***Set number of cells in the grid and Font to be used<br />
****Size of cell is adjusted to optimally fit the Font size given<br />
***Set size of the cell, number of cells in the grid, and Font to be used<br />
****Font is dynamically resized to fit optimally within the cell<br />
**Font size and style can be changed on the fly<br />
**Standard JComponent that meets JavaBean requirements for use with NetBeans built-in GUI Builder<br />
**Multiple grids of different configurations can be used simultaneously in the same display<br />
**Basic Swing animation support<br />
*Lots of Color<br />
**Foreground and Background can be set individually on a per-cell basis<br />
**SColor class extends Color and can be used as a drop-in replacement for any awt.Color needs<br />
**SColor chooser included to visually select named and adjusted colors<br />
**Over 500 named colors<br />
**Automatic color caching minimizes memory overhead<br />
**Can get a list of colors that are a gradient between two colors<br />
**Can perform LIBTCOD style "dark", "light", and "desaturate" commands on any color<br />
**Can get an arbitrary amount of blend between two colors<br />
*Roguelike Specific Toolkit<br />
**Robust Field of View system<br />
*Fully Documented API<br />
**Each named color has a sample of its appearance in the Javadoc against multiple backgrounds<br />
***HTML browsing of the API shows these samples<br />
***Pop-up javadoc in NetBeans and Eclipse show these samples<br />
**Demos of all functionality included<br />
*Math Toolkit<br />
**Custom extension of Random allows drop-in replacement with added features<br />
**Able to find Bresenham Line for 2D and 3D coordinates.<br />
<br />
<br />
GitHub repository: https://github.com/SquidPony/SquidLib<br />
<br />
Blog updates: http://squidpony.com/not-games/squidlib/<br />
<br />
Developed by [[Deej|Eben Howard]]<br />
<br />
[[Category:Developing]]</div>Deejhttp://roguebasin.com/index.php?title=SquidLib&diff=30541SquidLib2012-12-08T20:17:31Z<p>Deej: updated info for update release</p>
<hr />
<div>{{library| name = SquidLib<br />
|developer = [[user:Deej|Eben Howard]]<br />
|released = Nov. 23rd, 2011<br />
|updated = Dec. 8th, 2012<br />
|dependencies = Java 6<br />
|status = In Active Development<br />
|licensing = [[Apache 2.0]]<br />
|language = [[Java]]<br />
|platforms = [[Unix]], [[Linux]], [[Mac OS X]], [[Windows]]<br />
|site = https://github.com/SquidPony/SquidLib<br />
}}<br />
<br />
===SquidLib is a Java library that provides a full featured toolbox for working with turn based games in Swing.===<br />
<br />
SquidLib is used for [[Wyrm]] and [[Epigon]].<br />
<br />
===Current Features===<br />
*Ease Of Use<br />
**Standard GUI notation of (x,y) locations within the grid.<br />
**Uses Swing<br />
**Any Font can be used<br />
**Specify Grid and Font size multiple ways<br />
***Set number of cells in the grid and Font to be used<br />
****Size of cell is adjusted to optimally fit the Font size given<br />
***Set size of the cell, number of cells in the grid, and Font to be used<br />
****Font is dynamically resized to fit optimally within the cell<br />
**Font size and style can be changed on the fly<br />
**Standard JComponent that meets JavaBean requirements for use with NetBeans built-in GUI Builder<br />
**Multiple grids of different configurations can be used simultaneously in the same display<br />
*Lots of Color<br />
**Foreground and Background can be set individually on a per-cell basis<br />
**SColor class extends Color and can be used as a drop-in replacement for any awt.Color needs<br />
**Over 500 named colors<br />
**Automatic color caching minimizes memory overhead<br />
**Can get a list of colors that are a gradient between two colors<br />
**Can perform LIBTCOD style "dark", "light", and "desaturate" commands on any color<br />
**Can get an arbitrary amount of blend between two colors<br />
*Full Featured API<br />
**Each named color has a sample of its appearance in the Javadoc against multiple backgrounds<br />
***HTML browsing of the API shows these samples<br />
***Pop-up javadoc in NetBeans and Eclipse show these samples<br />
**Demos of all functionality included<br />
**Demos of tying in to mouse and keyboard Swing events included<br />
*Math Toolkit<br />
**Custom extension of Random allows drop-in replacement with added features<br />
**Able to find Bresenham Line for 2D and 3D coordinates.<br />
<br />
===Features in Nightly Build===<br />
*Animations<br />
**Slide, bump, wiggle, etc.<br />
*Graphics<br />
**Support for tile graphics alongside or in place of character display<br />
<br />
<br />
<br />
GitHub repository: https://github.com/SquidPony/SquidLib<br />
<br />
Blog updates: http://squidpony.com/not-games/squidlib/<br />
<br />
Developed by [[Deej|Eben Howard]]<br />
<br />
[[Category:Developing]]</div>Deejhttp://roguebasin.com/index.php?title=SquidLib&diff=30540SquidLib2012-12-08T20:12:09Z<p>Deej: </p>
<hr />
<div>===SquidLib is a Java library that provides a full featured toolbox for working with turn based games in Swing.===<br />
<br />
SquidLib is used for [[Wyrm]] and [[Epigon]].<br />
<br />
===Current Features===<br />
*Ease Of Use<br />
**Standard GUI notation of (x,y) locations within the grid.<br />
**Uses Swing<br />
**Any Font can be used<br />
**Specify Grid and Font size multiple ways<br />
***Set number of cells in the grid and Font to be used<br />
****Size of cell is adjusted to optimally fit the Font size given<br />
***Set size of the cell, number of cells in the grid, and Font to be used<br />
****Font is dynamically resized to fit optimally within the cell<br />
**Font size and style can be changed on the fly<br />
**Standard JComponent that meets JavaBean requirements for use with NetBeans built-in GUI Builder<br />
**Multiple grids of different configurations can be used simultaneously in the same display<br />
*Lots of Color<br />
**Foreground and Background can be set individually on a per-cell basis<br />
**SColor class extends Color and can be used as a drop-in replacement for any awt.Color needs<br />
**Over 500 named colors<br />
**Automatic color caching minimizes memory overhead<br />
**Can get a list of colors that are a gradient between two colors<br />
**Can perform LIBTCOD style "dark", "light", and "desaturate" commands on any color<br />
**Can get an arbitrary amount of blend between two colors<br />
*Full Featured API<br />
**Each named color has a sample of its appearance in the Javadoc against multiple backgrounds<br />
***HTML browsing of the API shows these samples<br />
***Pop-up javadoc in NetBeans and Eclipse show these samples<br />
**Demos of all functionality included<br />
**Demos of tying in to mouse and keyboard Swing events included<br />
*Math Toolkit<br />
**Custom extension of Random allows drop-in replacement with added features<br />
**Able to find Bresenham Line for 2D and 3D coordinates.<br />
<br />
===Features in Nightly Build===<br />
*Animations<br />
**Slide, bump, wiggle, etc.<br />
*Graphics<br />
**Support for tile graphics alongside or in place of character display<br />
<br />
<br />
<br />
GitHub repository: https://github.com/SquidPony/SquidLib<br />
<br />
Blog updates: http://squidpony.com/not-games/squidlib/<br />
<br />
Developed by [[Deej|Eben Howard]]<br />
<br />
[[Category:Developing]]</div>Deejhttp://roguebasin.com/index.php?title=Recently_Updated_Roguelikes&diff=29618Recently Updated Roguelikes2012-09-17T15:57:24Z<p>Deej: added Earl Spork</p>
<hr />
<div>Roguelike games updated or released in the last 12 months<br />
<br />
When adding a new game to this list, make sure to keep it in alphabetical order.<br />
<br />
{| border="0" style="border: 1px solid #999; background-color:#FFFFFF"<br />
|- align="center" bgcolor="#CCCCCC"<br />
! Name !! Type !! Last update !! Last version !! Based on !! Language<br />
{{Update | #ffffff | ADOM |http://www.ancientdomainsofmystery.com| | {{stable}}{{alpha}} | Fantasy | Sep 16 2012 | 1.2.0p3 | | [[C]] }}<br />
{{Update | #efefef | ADOM II |http://www.ancientdomainsofmystery.com| | {{beta}} | Fantasy | May 20 2012 | 0.2.8 | [[ADOM]] [[JADE]] | [[Java]] }}<br />
{{Update | #ffffff | AliensRL |http://alien.chaosforge.org/| | {{beta}} | Sci-fi | Sep 07 2012 | 0.8.2 | | [[FreePascal]] }}<br />
{{Update | #efefef | Allure of the Stars |http://github.com/Mikolaj/Allure| | {{alpha}} | Sci-fi | Mar 24 2012 | 0.4.4 | | [[Haskell]] }}<br />
{{Update | #ffffff | The ASCII Project |http://www.theasciiproject.com |(MMORPG)| {{alpha}} | Fantasy, Modern, Sci-Fi | Aug 25 2012 | 0.0.0m - Stable | [[Dwarf Fortress]], [http://minecraft.net Minecraft] | [[C]],[[C++]], Mendel }}<br />
{{Update | #efefef | Bardess |http://sites.google.com/sites/bardesstemp/| | {{stable}}{{beta}} | Fantasy, Tactical, Team | Jun 13 2012 | 0.6prc | |[[C#]]}}<br />
{{Update | #ffffff | Cursed Dungeons |http://droidgnome.blogspot.se/| | {{beta}} | Fantasy | Jun 06 2012 | 0.1.0 | | [[Java]] }}<br />
{{Update | #efefef | Demonhunt |http://www.demonhunt.org/| | {{Stable}} | Mythology | Dec 24 2011 | 2.0 | | [[Java]] }}<br />
{{Update | #ffffff | Diggr |http://code.google.com/p/diggr-roguelike/| | {{beta}} | Surreal | Feb 25 2012 | v12.02.26 | | [[Python]] }}<br />
{{Update | #efefef | Drakefire Chasm |http://dowhilecompiling.blogspot.com/p/drakefire-chasm.html| | {{Stable}} | Fantasy | Sep 16 2012 | 1.3 || [[C++]]}}<br />
{{Update | #ffffff | Earl Spork |http://squidpony.com/games/computer-games/earl-spork/earl-spork-2-0-released-for-arrp/| | {{Stable}} | Food Platformer | Sep 16 2012 | 2.0 | | [[Java]] }}<br />
{{Update | #efefef | Epilogue |http://kraflab.com/epilogue.html| | {{Stable}} | Fantasy | Sep 07 2012 | 2.4 | | [[Blitzmax]] }}<br />
{{Update | #ffffff | Fall From Heaven |http://ffhtr.blogspot.com/| then Roguelike | {{alpha}} | Fantasy | Jun 18 2012 | 0.0.9-3 | ELONA | [[Delphi]] }}<br />
{{Update | #efefef | Fame |http://sourceforge.net/projects/untitled-rpg| | {{stable}} | Fantasy | Aug 5 2012 | 0.8.0 | &nbsp; | [[C++]] }}<br />
{{Update | #ffffff | Forays into Norrendrin |http://code.google.com/p/forays-into-norrendrin/downloads/list| | {{stable}} | Fantasy | Feb 15 2012 | 0.6.0 | | [[C Sharp|C#]] }}<br />
{{Update | #efefef | Herculeum |https://github.com/tuturto/pyherc| | {{alpha}} | Fantasy | Sep 15 2012 | 0.6 | | [[Python]] }}<br />
{{Update | #ffffff | Hokuto no Rogue |http://hokuto-no-rogue.sourceforge.net/| | {{alpha}} | Anime | Mar 17 2012 | 0.6.0 | | [[Java]] }}<br />
{{Update | #efefef | HordeTheory |http://hordetheory.blogspot.com/p/hordetheory_04.html| | {{beta}} | No Setting | Mar 8 2012 | Beta 2 | | [[Game Maker language]] }}<br />
{{Update | #ffffff | Ighalsk |http://sourceforge.net/projects/ighalsk/ | | {{alpha}} | Fantasy | Jul 31 2012 | 0.1.16 | | [[Python]] }}<br />
{{Update | #efefef | Ignite |http://alexbard.org.ua/| | {{alpha}} | Fantasy | Apr 15 2012 | 0.41 | | [[C#]] [[XNA]] }}<br />
{{Update | #ffffff | Intelligence: The Roguelike |http://www.github.com/littleglassdiode/irl| | {{alpha}} | Science Fiction | Sep 15 2012 | 0.0.1 | | [[C]] }}<br />
{{Update | #efefef | Into the Dungeon ++ |http://studio7.guru-gaming.org| | {{beta}} | Fantasy | Feb 24 2012 | 0.7 | | [[Cpp | C++]] }}<br />
{{Update | #efefef | LambdaRogue |http://lambdarogue.net| | {{stable}} | Fantasy/Sci-fi | Jun 10 2012 | 1.6.4 | | [[Free Pascal]], [[SDL]] }}<br />
{{Update | #ffffff | Legacy |https://sites.google.com/site/legacydevpage/home| | {{alpha}} | Fantasy | Nov 3 2011 | 0.1.4 | &nbsp; | [[Java]] }}<br />
{{Update | #efefef | Legend of Siegfried |http://legendofsiegfried.wordpress.com| | {{beta}} | Fantasy | Jun 22 2012 | 0.2.5 | [[ADOM]] | [[C_Sharp | C#]] }}<br />
{{Update | #ffffff | Middlecrest |http://sourceforge.net/projects/middlecrest/files/| | {{alpha}} | Fantasy | Nov 11 2011 | 0.2.23 | | [[C]], [[Cpp | C++]], [[Lua]] }}<br />
{{Update | #efefef | Neon |http://sourceforge.net/projects/neon/| | {{alpha}} | Fantasy | May 01 2012| 0.3.9 | | [[Java]], [[JavaScript]] }}<br />
{{Update | #ffffff | Netwhack |http://tsukino.ca/play-netwhack/| | {{stable}} | Fantasy | Oct 21 2011 | 0.5.9 | [[Nethack]], [[ADOM]] | [[Java]] }}<br />
{{Update | #efefef | NitroHack |http://nitrohack.org/| | {{stable}} | Fantasy | Jan 16 2012 | 4.0.0 | [[Nethack]] | [[C]] }}<br />
{{Update | #ffffff | NLarn |http://nlarn.sourceforge.net/| | {{beta}} | Fantasy | Jul 6 2012 | 0.7.2 | [[Larn]] | [[C]] }}<br />
{{Update | #efefef | Noxico |http://helmet.kafuka.org/noxico/| | {{alpha}} | Erotic fantasy | Sep 15 2012| 0.1.10 | | [[CSharp|C#]] }}<br />
{{Update | #ffffff | NPPAngband |http://forum.nppangband.org/| | {{stable}} | Fantasy | Mar 19 2012 | 0.5.4 | [[Angband]] | [[C]] }}<br />
{{Update | #efefef | PWMAngband |http://powerwyrm.monsite-orange.fr/page5/index.html/| | {{stable}} | Fantasy | Aug 31 2012 | 1.1.9 beta | [[Angband]] | [[C]] }}<br />
{{Update | #ffffff | Rogue Survivor |http://roguesurvivor.blogspot.com/| | {{alpha}} | Modern/Sci-Fi | Apr 28 2012 | 9 | &nbsp; | [[C#]] }}<br />
{{Update | #efefef | Serial Killer |http://skrdev.blogspot.com/| | {{alpha}} | Modern, Surreal | Apr 14 2012 | 0.2.2 | &nbsp; | [[Java]] }}<br />
{{Update | #ffffff | Shepherd Slaughter |http://blindhack.com/shepherd-slaughter| | {{Stable}} | Fantasy | May 30 2012 | 9.0 || [[Python]]}}<br />
{{Update | #efefef | TomeNET |http://www.tomenet.net/| (multiplayer) | {{stable}} | Fantasy | Jan 1 2011 | 4.4.6b | MAng,ToME,ZAng,Cth | [[C]],[[Lua]] }}<br />
{{Update | #ffffff | ToME |http://tome.te4.org/| | {{stable}}{{beta}} | Fantasy,A | Sep 04 2011 | 4.0.0beta1 | Zangband 2.2.0 | [[C]], [[Lua]], [[OpenGL]] }}<br />
{{Update | #efefef | Triangle Wizard |http://trianglewizard.webs.com/| | {{stable}} | Fantasy | Sep 15 2012 | R 15.02 | | [[Game Maker language | GML]] }}<br />
{{Update | #ffffff | Ultima Ratio Regum |http://www.ultimaratioregum.co.uk/game/| | {{alpha}} | Hist | July 11 2012 | 0.1.2b | | [[Python]] }}<br />
{{Update | #efefef | UnNetHack |http://sourceforge.net/projects/unnethack/| | {{beta}} | Fantasy,H | Apr 01 2012 | 4.0.0 | Nethack 3.4.3 | [[C]] }}<br />
{{Update | #ffffff | Voxel Heroes |http://bigbadwofl.blogspot.com/| | {{alpha}} | Fantasy | Mar 13 2012 | 0.11 | | [[C++]] }}<br />
{{Update | #efefef | Voyage to Farland |http://www.peculiar-games.com/| | {{stable}} | Fantasy | Oct 31 2011 | 1.8t | &nbsp; | [[C]], [[Java]] }}<br />
{{Update | #ffffff | Wayward |http://www.unlok.ca/wayward/| | {{alpha}} | [[Wilderness Survival]] | Sep 15 2012 | Alpha 1.5 | | [[HTML5]], [[JavaScript]] }}<br />
{{Update | #efefef | WazHack |http://www.wazhack.com/| | {{beta}} | Fantasy | Mar 24 2012 | Beta 3 | [[NetHack]] | [[C#]], [[JavaScript]] }}<br />
{{Update | #ffffff | World of Tey |http://www.forgottenplanet.com/caillan/tey/index.html| | {{alpha}} | Original Fantasy | Feb 29 2012 | 0.13.0 | XirrelaiRPG | [[Game Maker language|GML]] }}<br />
{{Update | #efefef | X@COM |http://xcomrl.blogspot.com| | {{alpha}} | Sci-fi | Sep 16 2012 | 0.15.120916r7 | X-COM | [[C++]] }}<br />
{{Update | #ffffff | Zero-Player Game |http://iniquitatis.narod.ru/zpg/zpg_en.html| | {{stable}} | Fantasy | Aug 21 2012 | Build 48 | | [[FreeBASIC]]}}<br />
|}<br />
<br />
Type: Fantasy, Sci-fi, Modern, Anime, Surreal, Hist. = Historical, A = Angband variant, H = Hack variant, R = Rogue variant, 7 = (originally) 7DRL or similar<br />
<br />
<br />
[[Recently Updated Roguelikes/archive]]</div>Deejhttp://roguebasin.com/index.php?title=News&diff=29617News2012-09-17T15:48:52Z<p>Deej: added Earl Spork to new release</p>
<hr />
<div><!-- Add new news to the top --><br />
<!-- Don't forget to update Recently Updated Roguelikes. --><br />
* 16 Sep 2012 - [[Earl Spork]] 2.0 (ARRP) [http://squidpony.com/games/computer-games/earl-spork/earl-spork-2-0-released-for-arrp/ released]<br />
* 16 Sep 2012 - [[Mushroomvania]] 0.0.1a (ARRP) [http://www.mediafire.com/file/wm46th7cy4arw6v/Mushroomvania001.zip released]<br />
* 16 Sep 2012 - [[@Star Wars]] 0.4b [http://www.caffeineoverdose.me/2012/09/04b-changelog-and-download.html released]<br />
* 16 Sep 2012 - [[Encircled]] 0.4 (ARRP) [http://kleinroguelikes.blogspot.co.uk/2012/09/arrp-encircled-and-mutant-aliens-update.html released]<br />
* 16 Sep 2012 - [[Mutant Aliens!]] Update 4 (ARRP) [http://kleinroguelikes.blogspot.co.uk/2012/09/arrp-encircled-and-mutant-aliens-update.html released]<br />
* 16 Sep 2012 - [[MagmaHack]] beta 1 [http://weirdrogue.blogspot.de/2012/09/magmahack-beta-1-arrp.html released]<br />
* 16 Sep 2012 - [[Fylish Island]] for ToME 0.9.42 [http://te4.org/blogs/darkgod/2012/09/arrp/arrp-2012-fylish-island released]<br />
* 16 Sep 2012 - [[NetHack-De]] 3.4.3-20120916a [http://unnethack.wordpress.com/2012/09/16/nethack-de-3-4-3-20120916a-veroffentlicht/ released]<br />
* 16 Sep 2012 - [[Halls of Mist]] 1.2.1 [http://angband.oook.cz/forum/showthread.php?t=5673 released]<br />
* 16 Sep 2012 - [[X@COM]] R7 "Chryssalids in my Backyard" [http://xcomrl.blogspot.com/2012/09/r7-chryssalids-in-my-backyard.html released]<br />
* 16 Sep 2012 - [[Infra Arcana]] v13.0 [http://infraarcana.wikispaces.com/Downloads released]<br />
* 16 Sep 2012 - [[ADOM]] v1.2.0p3 [http://www.ancientdomainsofmystery.com/2012/09/the-final-public-prerelease-adom-120p3.html released]<br />
* 16 Sep 2012 - [[Drakefire Chasm]] v1.3 [http://dowhilecompiling.blogspot.fi/2012/09/2012-arrp-drakefire-chasm-v13-released.html released]<br />
* 15 Sep 2012 - [[Intelligence: The Roguelike]] 0.0.1 [http://github.com/littleglassdiode/irl released]<br />
* 15 Sep 2012 - [[RailRL]] ALPHA [https://plus.google.com/105346527211268283692/posts/6USdF3wstgk released]<br />
* 15 Sep 2012 - [[@Star Wars]] 0.4a [http://www.caffeineoverdose.me/2012/09/04a-change-log-download.html released]<br />
* 15 Sep 2012 - [[Herculeum]] 0.6 [https://github.com/tuturto/pyherc released]<br />
* 15 Sep 2012 - [[Cosmic Commando]] 0.1 [http://bitbucket.org/zasvid/cosmiccommando/downloads released]<br />
* 15 Sep 2012 - [[Wayward]] Alpha 1.5 [http://www.unlok.ca/wayward/ released]<br />
* 15 Sep 2012 - [[Into The Dungeon++]] 0.8 [http://studio7.guru-gaming.org/ released]<br />
* 15 Sep 2012 - [[Triangle Wizard]] R 15.02 [http://www.trianglewizard.webs.com/ released]<br />
* 15 Sep 2012 - [[Rogue's Souls]] 0.7 [http://forums.tigsource.com/index.php?topic=26781.0 released]<br />
* 15 Sep 2012 - [[Noxico]] 0.1.10 [http://helmet.kafuka.org/noxico/?downloads released]<br />
* 15 Sep 2012 - [[Angband]] v3.4 [http://rephial.org released]<br />
* 15 Sep 2012 - [[RRRSRoguelike]] v0.5.0 [http://rrrsroguelike.codeplex.com/ released]<br />
* 15 Sep 2012 - [[UnBrogue]] 1.0 [http://roguelikedeveloper.blogspot.com.au/2012/09/lets-get-this-arrpty-started.html released]<br />
* 11 Sep 2012 - [[Blacken]] 1.1 [https://sites.google.com/site/blackenlib/blacken-1-1-release-announcement released]<br />
* 11 Sep 2012 - [[Epilogue]] v2.5 [http://kraflab.com/blog/?page_id=16 released]<br />
* 07 Sep 2012 - [[Epilogue]] v2.4 [http://kraflab.com/blog/?page_id=16 released]<br />
* 07 Sep 2012 - [[AliensRL]] 0.8.2 [http://alien.chaosforge.org/ released]<br />
* 03 Sep 2012 - [[WebRaidMobile]] Web Raid Mobile 3.1 [https://play.google.com/store/apps/details?id=de.agsteiner.android.webraid released]<br />
* 01 Sep 2012 - [[Death Settler]] r2 [http://roguegamerdev.blogspot.com released]<br />
* 01 Sep 2012 - [[Epilogue]] v2.3 [http://kraflab.com/blog/?page_id=16 released]<br />
* 31 Aug 2012 - [[PWMAngband]] 1.1.9 beta [https://www.mangband.org/forum/viewtopic.php?f=9&t=1932&start=15#p9083 released]<br />
* 29 Aug 2012 - [[libtcod]] v1.5.1 [http://doryen.eptalys.net/libtcod/download released]<br />
* 29 Aug 2012 - [[Death Settler]] pre-alpha [https://sourceforge.net/projects/dsettler/ released]<br />
* 29 Aug 2012 - [[RRRSRoguelike]] v0.4.0 [http://rrrsroguelike.codeplex.com/ released]<br />
* 28 Aug 2012 - [[Harmonia]] 0.0.3 [http://www.harmonia-online.net/wiki/Play released]<br />
* 20 Aug 2012 - [[The ASCII Project]] 0.0.0m First Binary Release [http://www.theasciiproject.com released]<br />
* 25 Aug 2012 - [[RRRSRoguelike]] v0.3.0 [http://rrrsroguelike.codeplex.com/ released]<br />
* 25 Aug 2012 - [[TomeNET]] 4.4.9b [http://www.tomenet.net/ released]<br />
* 23 Aug 2012 - [[Noxico]] 0.1.9 [http://helmet.kafuka.org/noxico/?downloads released]<br />
* 23 Aug 2012 - [[SpaceNodes]] v1.0 [http://codingden.net/ld-24-warmup-game/ released]<br />
<br />
<div style="text-align:right"><br />
''See also: [[Old news]], [[Recently Updated Roguelikes]]''<br />
</div><br />
<br />
[[Category:Main]]</div>Deejhttp://roguebasin.com/index.php?title=Earl_Spork&diff=29616Earl Spork2012-09-17T15:46:21Z<p>Deej: updated updated date</p>
<hr />
<div>{{game-7drl| name = Earl Spork<br />
|developer = [[Deej|Eben Howard]]<br />
|influences = Platformers<br />
|released = Mar 15, 2010 (0.6)<br />
|updated = Sep 16, 2012 (2.0)<br />
|language = [[Java]]<br />
|platforms = any with a JRE<br />
|theme = Jumping!<br />
|length = Short<br />
|site = http://squidpony.com/category/thoughts/games/computer-games/earl-spork/<br />
|licensing = <br />
|interface = [[libjcsi]]<br />
}}<br />
<br />
A short 7dRL created for the 2010 7dRL Challenge.<br />
<br />
Turn based side-scroller, with destructible environment elements!<br />
<br />
You have a limited jumping height, but if you land on the top of an enemy, you can jump even higher!<br />
<br />
There is only one level, but it's randomly generated each time you start a new game.<br />
<br />
Look for the secret sneaky way to win! Hint: it requires both skill and luck!</div>Deejhttp://roguebasin.com/index.php?title=Talk:Combat&diff=29319Talk:Combat2012-08-25T02:53:48Z<p>Deej: </p>
<hr />
<div>With all articles removed from the Combat category, that reference is out of date, but without that link, this entry really says nothing. "Combat" is too broad a concept to really deal with except through a category, so my instinct is to delete this page. What do you think? [[User:Rdanhenry|Rdanhenry]] 08:28, 14 June 2009 (CEST)<br />
<br />
: Don't forget to check the "What links here" page first. Really though I don't know why "Combat" isn't a valid subcategory of Articles. The Articles category is too crowded already, IMO. [[User:PaulBlay|PaulBlay]]<br />
<br />
:: Feel free to clear out the contents of the page-- deleting it prevents creation of further content in the future! --[[User:Nolithius|Nolithius]] 17:01, 23 August 2012 (CEST)<br />
<br />
:: All pages linking here have been edited to no longer link here. And content has been cleared. -[[User:Deej|Eben]] August 24st, 2012</div>Deejhttp://roguebasin.com/index.php?title=Alphaman&diff=29281Alphaman2012-08-22T05:44:25Z<p>Deej: reformatted to fit roguebasin wiki style</p>
<hr />
<div>{{game-stable| name = Alphaman<br />
|developer = [[Jeffrey R. Olson]]<br />
|theme = [[SF | Science Fiction]] (post-apocalyptic)<br />
|influences =<br />
|released = 1995<br />
|relver = 1<br />
|updated = 1995<br />
|updver = 1.1<br />
|language =<br />
|platforms = [[DOS]]<br />
|licensing = Shareware<br />
|interface = Extended [[ASCII]], Keyboard<br />
|length = 5 hours<br />
|site = there is no <br />
}}<br />
<br />
Alphaman is a classic post-apocalyptic roguelike.<br />
<br />
The player takes on the role of a genetically impure human undertaking a very important mission. Further information is to be found on a tape recording. This recording will self-destruct after transmitting the message. Each time a game is started two [[mutation]]s are randomly selected and assigned to the [[Player Character|player character]]. One physical mutation and one mental mutation, both chosen from a quite large set.<br />
<br />
Physical mutations are typically combat oriented. Tentacles, quills, poison claws and tough exoskeleton all are available. Most mutations are limited by a cooldown system. After activating an effect you need to wait a bit until you can use it again. Mental changes include cryogenics, military genius, scientific genius, and hypnosis. Using different combinations of mutations each playthrough adds a unique element of enjoyment and enhances the game's replayability.<br />
<br />
There are a lot of humorous elements in the game. For example toilet paper is very effective against dung beetles.<br />
<br />
Alphaman feature wide array of cool technological devices, usually unidentified when found. Unlike most roguelikes [[Identification|identification]] is not accomplished by use or through a "foo of identify". The player has to use a 'f'igure out command which results in the character trying to reveal possible ways to use it. However, if you happen to fail badly the item will break! The machines range from tiny pencil sharpeners to large, heavy and cumbersome dialysis machines.<br />
<br />
Berries take the place of potions in the world of Alphaman. Each berry subspecimen has a random name. The potency of a berry is measured by its ripeness which in turn is determined by its color. Riper berries have stronger effects while less ripe ones almost no effect. It is important to discover bad berries by eating them when unripe but use beneficial ones when they are ripest. This leads to many identification strategies.<br />
<br />
Alphaman's overworld is randomly generated anew for each game. The overworld is free to roam and explore, although the locations of castles (places where quests crucial to game victory can be completed) are known. Randomly placed ruined buildings can also be found while traveling. They are often worth exploring for the many useful treasures which may be hidden within.<br />
<br />
In Alphaman the player needs to eat and sleep. The use of caffeine may delay the sleep timer somewhat.<br />
<br />
The total time to complete the game is limited just like in [[Larn]] and Fallout 1. If you fail to achieve victory before the archenemy manages to accomplish his plan it is the same as if you had died. There are three difficulty levels available if winning seems too difficult. These modes are available at the start of the game.<br />
<br />
Alphaman also features the ability to save the game and continuing to play.<br />
<br />
<br />
== From readme.txt ==<br />
<br />
AlphaMan (Copyright (c) 1995 Jeffrey R. Olson) is an adventure game set on<br />
Earth in the future, following a nuclear disaster. You will take the role of<br />
a mutated human who is struggling to save the planet from annihilation. You<br />
will be pitted against hideously mutated plants and animals, traps and snares<br />
of all sorts, and several varied adversaries whom you will have to defeat in<br />
order to complete your mission. At your disposal are a broad variety of<br />
technological relics and mutated substances which you will acquire along the<br />
way, as well as your own powers and guile.<br />
<br />
== Related links ==<br />
* [http://www.homeoftheunderdogs.net/game.php?id=1627 A review] at Home of the Underdogs<br />
* [http://members.chello.at/theodor.lauppert/games/alphaman.htm Review and downloads]<br />
* [http://www.download-central.ws/DOS/Games/A/Alphaman/ Short summary and downloads]<br />
* [http://mutant-future.wikia.com/wiki/AlphaMan Review] at Mutant Future Wiki<br />
* [http://tripalot.com/roguelike/files/alphaman-11.zip Download link #1]<br />
* [http://www.archive.org/details/Alphaman-roguelike Download link #2]</div>Deejhttp://roguebasin.com/index.php?title=4DRL&diff=292804DRL2012-08-22T05:30:54Z<p>Deej: created page rather than redirected to single contest page, allowing 4drl to be used more generally</p>
<hr />
<div>A 4DRL is a roguelike made in just 4 consecutive days.<br />
<br />
There was a [[4DRL Contest 2010]] which had several entries.</div>Deejhttp://roguebasin.com/index.php?title=Fantasy&diff=29279Fantasy2012-08-22T05:26:28Z<p>Deej: linked directly to Fantasy heading on Themes page</p>
<hr />
<div>#REDIRECT [[Themes#Fantasy]]</div>Deejhttp://roguebasin.com/index.php?title=Tale_of_Arcana&diff=29278Tale of Arcana2012-08-22T05:25:03Z<p>Deej: fixed redirect</p>
<hr />
<div>#REDIRECT [[Vogroth Dawn]]</div>Deejhttp://roguebasin.com/index.php?title=User:Sat79&diff=29277User:Sat792012-08-22T05:24:11Z<p>Deej: fixed redirect</p>
<hr />
<div>#REDIRECT [[PlainsMfkr]]</div>Deejhttp://roguebasin.com/index.php?title=Test&diff=29276Test2012-08-22T05:23:23Z<p>Deej: fixed redirect</p>
<hr />
<div>#REDIRECT: [[sandbox]]</div>Deejhttp://roguebasin.com/index.php?title=Test&diff=29275Test2012-08-22T05:23:01Z<p>Deej: fixed redirect</p>
<hr />
<div>#REDIRECT: [[sandBox]]</div>Deej