Craft entire online worlds with a professional 2D RPG engine and toolkit. Build tile-based maps with AJAX-driven exploration, design branching dialogs and quests, and structure combat, inventory, skills, and pets to create a living RPG that plays smoothly in the browser.
Ship faster with robust web-based editors for maps, dialogs, locations, items, monsters, and quests—plus analytics, admin panels, and a modular architecture. NEAB Explorer empowers designers and worldbuilders to author content at scale and launch polished, story-rich experiences.
Title: NEAB Explorer v1.3.1
Full Name: Nowhere Else and Beyond Explorer Engine
Genre: Browser-Based 2D Fantasy RPG Engine / Toolkit
Release Date: 2005-2007
Version: 1.3.1 (mature release)
Developer: Alain Bertrand (aka "Garg")
Team: Sebastian Budijanto (QA, "Zorich"), Robert Smith (code contributor, "Papa See")
Website: http://www.nowhere-else.org (defunct)
Game Site: http://www.nowhere-else.org/engine (defunct)
License: Proprietary with Modification Rights
Project Status: Mature engine, stable release
Archive Structure:
neab_explorer/
└── NEAB Explorer/
├── install.txt # Installation guide
├── license.txt # License agreement
├── rpg_tables.sql # Database schema (1,896 lines!)
├── docs/ # 118 .txt source documentation files
└── neab/ # Main game directory
├── index.php # Login/registration
├── game.php # Main game engine (484 lines)
├── config/config.inc # Database credentials
├── libs/ # Core utilities (1,297-line misc_util.php!)
├── admin_tools/ # 12 web-based admin tools
├── player_tools/ # Player features
├── locations/ # Game locations
├── locations_modules/ # Location type templates
│ └── 2dmap/ # 2D tile map system with AJAX
├── combat/ # Combat system (739-line combats_util.php)
├── skills/ # Crafting, spells, harvesting
├── objects/ # Items
├── monsters/ # Enemy definitions
├── inventory/ # Inventory management
├── menu/ # Navigation
└── maps/ # Map data
Historical Context:
NEAB Explorer represents professional browser RPG engine development circa 2005-2007. Unlike hobbyist projects (Mob Star, Mroczni Rycerze), this is a complete game creation toolkit designed for others to build games. The parent game "Nowhere Else and Beyond" (www.nowhere-else.org) was a live browser RPG that inspired this engine. Alain Bertrand created a commercial-grade engine with:
This is a true game engine. Previous entries were standalone games; NEAB Explorer is a platform for creating games.
---
libs/db_conn.php:
// Auto-detects PHP version and loads appropriate driver
if((substr(phpversion(),0,1)+0) >= 5)
include "$basedir/libs/db_conn_5.php"; // PHP 5 version
else
include "$basedir/libs/db_conn_4.php"; // PHP 4 version
Custom qstr() Method (SQL escaping):
// libs/db_conn_4.php & db_conn_5.php
function qstr($str) {
return "'".mysql_real_escape_string($str,$this->conn)."'";
}
Usage Pattern:
// index.php:55 - PROPER SQL INJECTION PREVENTION
$sql="SELECT ID,PASSWORD,ROLE,AUTHORIZED,HELPER
FROM PLAYER
WHERE USERNAME = ".$db->qstr(trim(stripslashes($_POST["USERNAME"])));
This game consistently use a database abstraction layer with escaping. The `$db->qstr()` method wraps mysql_real_escape_string() and is used extensively (30+ matches found).
index.php (login):
// Store credentials in cookie
setcookie("RPG",
$res->fields[0]."/". // User ID
urlencode(trim(stripslashes($_POST["USERNAME"])))."/". // Username
urlencode(trim(stripslashes($_POST["PASSWORD"])))."/". // Password (PLAINTEXT!)
"Y", // Remember flag
time()+3600<em>24</em>30 // 30-day expiry
);
game.php (auth check):
if($_COOKIE["RPG"] != "") {
$p=explode("/",$_COOKIE["RPG"]);
$id=$p[0]+0;
$username=urldecode($p[1]);
$password=urldecode($p[2]); // PLAINTEXT PASSWORD IN COOKIE!
$uservals=read_db_entry($db,"SELECT * FROM PLAYER WHERE ID = $id AND AUTHORIZED IN ('Y','-')");
if(strtoupper($uservals["USERNAME"]) == strtoupper($username)
&& strtoupper($uservals["PASSWORD"]) == strtoupper($password))
$userid=$uservals["ID"];
}
CRITICAL SECURITY ISSUE: Passwords stored in plaintext in both:
Generic Map Architecture:
Client Browser:
├── generic_map.php → Renders 7x7 tile view
├── map_script.js → JavaScript handles movement/combat
└── AJAX calls to action_on_map.php
↓
Server Backend:
├── action_on_map.php → Processes player actions
├── loadmap.php → Loads map data (516 lines!)
└── map_util.php → Map utilities
AJAX Combat System (combats_util.php - 739 lines):
Code Statistics:
| File | Lines | Purpose |
|---|---|---|
| misc_util.php | 1,297 | Core utilities (quests, mail, activities, etc.) |
| user_admin.php | 1,053 | Admin panel for user management |
| object_editor.php | 934 | Item/object editor |
| map_editor.php | 918 | Visual map editor |
| quests_util.php | 806 | Quest/dialog system |
| combats_util.php | 739 | Combat engine |
| dialog_editor.php | 639 | Branching conversation editor |
| inventory.php | 612 | Inventory management |
| action_on_map.php | 550 | AJAX map actions |
| loadmap.php | 516 | Map loading/rendering |
Average file size: 174 lines per PHP file (professional modularity).
---
1. Character Stats (PLAYER table - 98 columns!)
LEVEL INTEGER DEFAULT 1,
EXPERIENCE BIGINT DEFAULT 0,
DEXTERITY INTEGER DEFAULT 2, -- Ranged attack, dodging
STRONGNESS INTEGER DEFAULT 2, -- Melee damage
CHARISMA INTEGER DEFAULT 1, -- NPC reactions, discounts
INTELLIGENCE INTEGER DEFAULT 1, -- Magic power, MP
HP INTEGER DEFAULT 14,
MAXHP INTEGER DEFAULT 14,
MP INTEGER DEFAULT 10,
MAXMP INTEGER DEFAULT 10,
GOLD BIGINT DEFAULT 100,
2. Equipment System (11 slots)
HAT INTEGER DEFAULT 501,
ARMOR INTEGER DEFAULT 0,
RING1 INTEGER DEFAULT 0,
RING2 INTEGER DEFAULT 0,
GLOVES INTEGER DEFAULT 0,
PANTS INTEGER DEFAULT 536,
SHOES INTEGER DEFAULT 514,
CAPE INTEGER DEFAULT 0,
SHIELD INTEGER DEFAULT 0,
WEAPON INTEGER DEFAULT 10,
3. Character Schools (Classes)
SCHOOL CHAR(1) BINARY,
-- Values: 'B' = Barbarian, 'C' = Archer/Crossbowman, 'M' = Mage
School Special Abilities:
4. Combat System (combats_util.php)
Stat-Based Calculation:
// Attacker damage
$attackval = $uservals["ATTACK"] + $uservals["COMBATSTR"]
+ ($uservals["DEXTERITY"] * $uservals["COMBATDEX"]);
// Defender protection
$protval = $monster["PROTECTION"] + ($monster["DEXTERITY"] * $block);
// Final damage
$dmg = max(1, $attackval - $protval) + weapon_damage;
Combat Actions:
5. Quest System (quests_util.php - 806 lines)
Dialog-Driven Quests:
CREATE TABLE DIALOGS(
LOCATION INTEGER,
NPC VARCHAR(100), -- NPC name
DIALOGID INTEGER, -- Dialog tree node
CONTENT TEXT, -- Dialog text
DOCODE TEXT -- PHP code to execute
);
CREATE TABLE DIALOGLINKS(
NPC VARCHAR(100),
DIALOGFROM INTEGER, -- Source dialog node
LINKTEXT VARCHAR(200), -- Choice text ("Accept quest")
DIALOGTO INTEGER, -- Target dialog node
IFCODE TEXT -- Condition code
);
Branching Conversations:
Quest Variables:
CREATE TABLE QUESTVARIABLES(
USERID INTEGER,
QUESTID INTEGER,
VARID INTEGER,
VALUE TEXT
);
Tracks quest progress (e.g., "wolves_killed = 5/10").
6. Crafting System (multiple skills)
Skills Implemented:
Crafting Formula System:
CREATE TABLE OBJECT_FORMULA(
OBJECTID INTEGER, -- Output item
NBITEMS INTEGER, -- Quantity needed
ITEM INTEGER, -- Input item
TYPE VARCHAR(1) -- 'O' = object, 'T' = tool
);
Example: Sword = 3x Iron Bar + 1x Hammer (tool)
7. Inventory System (inventory.php - 612 lines)
Features:
8. 2D Map Exploration (generic_map.php)
Map System:
Tile Types:
CREATE TABLE MAP_TILES(
MAPID INTEGER,
X INTEGER,
Y INTEGER,
TILEID INTEGER, -- Background tile (grass, water, etc.)
OBJECTID INTEGER, -- Foreground object (tree, rock, chest)
WALKABLE CHAR(1) -- 'Y' or 'N'
);
9. Arena System (PvP)
ARENAPOINTS INTEGER DEFAULT 0, -- Ranking points
ARENAFREEZE INTEGER DEFAULT 0, -- Stun duration
ARENAPOTION INTEGER DEFAULT 0, -- Potion restrictions
10. Pet System
CREATE TABLE PLAYER_PETS(
USERID INTEGER,
PETID INTEGER,
FOOD DOUBLE DEFAULT 100, -- Hunger level
HAPPY DOUBLE DEFAULT 100, -- Happiness level
HEALTH INTEGER,
LEVEL INTEGER
);
11. Medal System (Achievements)
CREATE TABLE MEDALS(
ID INTEGER,
NAME VARCHAR(100),
DESC TEXT,
ICONID INTEGER
);
CREATE TABLE PLAYER_MEDALS(
USERID INTEGER,
MEDALID INTEGER,
AWARDED TIMESTAMP
);
12. Mail System (misc_util.php)
Email Notifications:
// misc_util.php:502 - sends email when player receives in-game mail
mail($email,"NEAB Post office: $subject",
"You received a new message in your NEAB accountnn
http://www.nowhere-else.orgnJoin the community!",
"From: ".$from);
In-Game Messages:
CREATE TABLE PLAYER_MESSAGES(
FROMPLAYER INTEGER,
INBOXOF INTEGER,
SUBJECT VARCHAR(200),
MESSAGE TEXT,
MSGTYPE INTEGER, -- 1=inbox, 2=sent
STATUS CHAR(1), -- 'R'=read, 'N'=new
GOLD INTEGER DEFAULT 0, -- Attached gold
RENT INTEGER DEFAULT 0 -- Rental fee
);
Mail can include:
---
MAJOR IMPROVEMENTS:
1. Database Abstraction with Escaping ($db->qstr())
// GOOD: Consistent use throughout codebase
$sql="SELECT ID FROM PLAYER WHERE USERNAME = ".$db->qstr($_POST["USERNAME"]);
Found 30+ instances of $db->qstr() usage. This is the first game to use database abstraction consistently.
2. Input Casting (Integer Sanitization)
// GOOD: Cast to integer before using in SQL
$id = $_GET["ARROW"]+0; // Forces integer conversion
$page = $_GET["PAGE"]+0;
3. URL Tampering Detection (game.php)
if($_SERVER["HTTP_HOST"] != "localhost"
&& count($_GET) > 0
&& check_cert() == false)
{
echo "Tried to fake the URL.";
exit;
}
Uses `$gamecert` hash in config.inc to validate GET parameters (prevents URL manipulation).
4. Error Handling (custom handler)
function game_error_handling($errno, $errmsg, $filename, $linenum, $vars) {
if($errno == 8 || $errno == 2048) return; // Ignore notices
include "libs/handle_error.php";
}
set_error_handler("game_error_handling");
5. Admin IP Logging
CREATE TABLE ADMIN_LOG(
USERID INTEGER,
IP VARCHAR(15),
WHEN TIMESTAMP
);
Tracks admin actions with IP addresses.
6. Cross-Exploit Detection
CREATE TABLE CROSS_EXPLOIT(
FROMPLAYER INTEGER,
TOPLAYER INTEGER,
MESSAGE TEXT
);
Logs suspicious transactions (same IP accounts trading items/gold).
CRITICAL VULNERABILITIES:
1. PLAINTEXT PASSWORD STORAGE
-- rpg_tables.sql:14
PASSWORD VARCHAR(20), -- NO HASHING!
-- Default accounts:
INSERT INTO PLAYER(...,USERNAME,PASSWORD,...) VALUES(...,'admin','admin',...);
INSERT INTO PLAYER(...,USERNAME,PASSWORD,...) VALUES(...,'player','player',...);
Passwords stored in plaintext:
2. Cookie-Based Auth with Plaintext Credentials
// game.php:66
$password=urldecode($p[2]); // Extract plaintext password from cookie
Anyone with cookie access = full account access.
3. No CSRF Protection
4. XSS Still Possible
// stripslashes() used but minimal htmlspecialchars()
// User input can contain JavaScript in many places
5. Eval() Usage (Quest System)
// quests_util.php - EXECUTES USER-DEFINED CODE!
$code = 'if ('.$r->fields[1].') $res=true;';
eval($code); // IFCODE from DIALOGLINKS table
Quest editors can inject PHP code. While admin-only, this is dangerous if admin accounts compromised.
6. Deprecated mysql_* Functions
7. Some Integer Casting Missing
// combats_util.php:63 - DOES cast to int
$id=$_GET["DRINKID"]+0;
// But other places may miss casting
| Game | Security Score | SQL Injection | Password Storage | Auth Method |
|---|---|---|---|---|
| Mob Star | 1/10 | Epidemic | Plaintext cookies | Cookies |
| Mroczni Rycerze | 4/10 | Common | MD5 hashed | Sessions |
| NEAB Explorer | 7/10 | Mostly prevented | Plaintext | Cookies (plaintext!) |
| MCCodes | 7/10 | Mostly prevented | Hashed | Sessions |
NEAB Explorer has the BEST SQL injection prevention (database abstraction) but WORST password security (plaintext everywhere).
---
STRENGTHS:
1. Modular Architecture
neab/
├── libs/ # Core utilities (reusable functions)
├── admin_tools/ # Web-based admin panels (12 tools)
├── player_tools/ # Player features
├── locations_modules/ # Location type templates
├── combat/ # Combat system
└── skills/ # Crafting/gathering systems
Each module is self-contained with clear separation of concerns.
2. Database Abstraction Layer
// db_conn.php - Auto-detects PHP version
if((substr(phpversion(),0,1)+0) >= 5)
include "db_conn_5.php";
else
include "db_conn_4.php";
Custom ADODB emulation:
Claims to be "2x faster than ADODB."
3. Comprehensive Documentation
docs/
├── skills/ # 14 skill system docs
├── admin_tools/ # 12 admin tool docs
│ ├── quest_manager/
│ ├── dialog_editor/
│ ├── location_manager/
│ └── ...
└── player_tools/ # Player feature docs
118 .txt files with source code explanations (1,190 HTML files in total).
4. Professional Comments
/<em></em>
<ul>
<li><i class="fa fa-file-code-o"></i> Emulate ADODB (min) functionalities and at the same time be 2x as fast</li>
<li><i class="fa fa-file-code-o"></i> Code used for PHP 4.X</li>
</ul>
*/
PHPDoc-style comments throughout codebase.
5. Error Handling
set_error_handler("game_error_handling");
// Custom handler logs errors, prevents info leakage
6. Activity Tracking
CREATE TABLE ACTIVEPLAYER(
USERID INTEGER,
YEAR INTEGER,
MONTH INTEGER,
DAY INTEGER,
HOUR INTEGER
);
Tracks player activity by hour (analytics system).
7. Performance Optimization
// game.php:19 - Microsecond timing
$execstart=getmicrotime();
// ... page execution ...
// End of page: show execution time
8. Browser Compatibility
normal.css # Standard CSS
normal_ie.css # Internet Explorer fixes
Separate IE stylesheet (remember IE6-8 quirks in 2005-2007).
9. AJAX Integration
// map_script.js - handles 2D map movement
// Calls action_on_map.php via XMLHttpRequest
Advanced for 2007: AJAX was cutting-edge then.
10. Caching System
// store_cache.php - Serves cached images
if($_GET["OBJ"] != "")
$_SERVER["PATH_INFO"]="/".$_GET["OBJ"];
WEAKNESSES:
1. Plaintext Passwords
PASSWORD VARCHAR(20) -- Should be hashed
Major architectural flaw.
2. Cookie-Based Auth
// Should use sessions, not cookies with passwords
setcookie("RPG",$id."/".$username."/".$password."/Y");
3. Eval() in Quest System
eval($code); // DANGEROUS!
4. Large Function Files
misc_util.php: 1,297 lines
combats_util.php: 739 lines
quests_util.php: 806 lines
Should be broken into smaller files.
5. No Unit Tests
6. Deprecated MySQL Functions
mysql_connect()
mysql_query()
mysql_fetch_array()
All removed in PHP 7.0.
7. Magic Numbers
if($difftime < 5*60) // Why 5 minutes? No constant
8. Inconsistent Naming
-- Database uses UPPERCASE table names
CREATE TABLE PLAYER(...)
-- PHP uses lowercase/camelCase
$uservals, $db, $userid
---
50+ Tables:
Core Player System:
Inventory & Items:
Quests & Dialogs:
Maps & Locations:
Combat & Monsters:
Social & Economy:
Analytics:
1. PLAYER Table (98 columns!)
CREATE TABLE PLAYER(
-- Identity (6)
ID, CREATED, AUTHORIZED, USERNAME, PASSWORD, EMAIL,
-- Stats (19)
LEVEL, EXPERIENCE, DEXTERITY, STRONGNESS, CHARISMA, INTELLIGENCE,
HP, MAXHP, MP, MAXMP, SICKNESS, INVISIBILITY, TITLE, ALIGNEMENT,
ATTACK, PROTECTION, DEXMOD, STRMOD, CHAMOD,
-- Equipment (11)
HAT, ARMOR, RING1, RING2, GLOVES, PANTS, SHOES, CAPE, SHIELD, WEAPON,
-- Combat (9)
MONSTERCOMBAT, MONSTERHP, BLOCK, COMBATPROT, COMBATDEX, COMBATSTR,
COMBATSYSTEM, COMBATX, COMBATY,
-- Economy (3)
GOLD, BOUNTY, RENT,
-- Location (5)
LOCATION, SUBLOC, MAPX, MAPY, ONFINISH,
-- Arena (3)
ARENAPOINTS, ARENAFREEZE, ARENAPOTION,
-- Status (10)
FREEZE, HUNGRY, LASTCOMMAND, LASTACTION, ROLE, PHPPAGE, MSGSTATUS,
PVP, CHATBAN, AWAY,
-- UI Preferences (10)
NEWSLETTER, CHATSOUND, HELPER, QUICKINVENTORY, SCHOOL, SEX,
PREVDIALOG, IMAGEQUALITY, FULLSCREEN, MINIINVENTORY,
-- Pets (1)
DEFPET,
-- Stats Tracking (7)
LASTEXP, LASTLEVEL, TIMEPLAYED, IP, MAILNOTIFY, JAVACHAT, GUIBLOCKED,
-- Unused (5)
ICONID, HPMOD, MPMOD, INTMOD, POPIN, SIGNEDJAVA, RESURECT
);
Most complex player table in any game analyzed (1-43).
2. Quest Dialog System
Dialog Tree Structure:
NPC: "Hello, traveler!"
├─ [Choice 1: "Who are you?"] → Dialog ID 2
│ └─ NPC: "I'm the blacksmith." → Dialog ID 3
│ └─ [Choice: "Can you craft me a sword?"] → Quest starts
├─ [Choice 2: "I need a quest."] → Dialog ID 4
│ └─ NPC: "Kill 10 wolves." → Quest given
└─ [Choice 3: "Goodbye."] → Dialog ends
Implemented via:
3. Crafting Formula System
Example: Iron Sword
-- Output: Iron Sword (ID 100)
INSERT INTO OBJECT_FORMULA VALUES(100, 3, 50, 'O'); -- 3x Iron Bar
INSERT INTO OBJECT_FORMULA VALUES(100, 1, 200, 'T'); -- 1x Hammer (tool)
'O' = Object (consumed), 'T' = Tool (reusable)
4. Map Tile Data
7x7 View:
[Grass][Grass][Tree ][Grass][Grass][Water][Water]
[Grass][Rock ][Grass][Grass][Grass][Water][Water]
[Tree ][Grass][Grass][Player][Grass][Grass][Water]
[Grass][Grass][Grass][Chest][Grass][Tree ][Grass]
[Grass][Enemy][Grass][Grass][Grass][Grass][Grass]
[Water][Water][Grass][Grass][Tree ][Grass][Grass]
[Water][Water][Grass][Grass][Grass][Grass][Tree ]
Each cell has:
---
Context:
Similar Engines (2005-2007):
NEAB Explorer Innovation:
Pre-NEAB Explorer:
NEAB Explorer (2005-2007):
Post-NEAB Explorer:
vs MCCodes (Game 39, 2008):
| Feature | MCCodes | NEAB Explorer |
|---|---|---|
| Genre | Mafia | Fantasy RPG |
| Maps | Text-based | 2D tile-based AJAX |
| Quests | Simple missions | Dialog tree scripting |
| Admin Tools | Basic | 12 visual editors |
| Security | 7/10 (hashed passwords) | 7/10 (SQL safe, plaintext passwords) |
| Market | Huge (mafia games) | Niche (RPG engines) |
vs Mroczni Rycerze (Game 42, 2007):
| Feature | Mroczni Rycerze | NEAB Explorer |
|---|---|---|
| Codebase | 1,781 lines | 17,035 lines |
| Scope | Standalone game | Game engine |
| Security | 4/10 | 7/10 |
| Architecture | Basic MVC | Professional abstraction |
| Documentation | None | 118 doc files |
Lesson: NEAB Explorer represents professional game engine development vs hobbyist standalone games. The scale difference is dramatic (17k vs 1.7k lines).
---
None. Completely self-contained.
<ul>
<li><i class="fa fa-database"></i> mysql extension (deprecated, removed PHP 7.0)</li>
<li><i class="fa fa-caret-right"></i> GD library (image manipulation)</li>
<li><i class="fa fa-caret-right"></i> session support (built-in)</li>
<li><i class="fa fa-caret-right"></i> error_reporting (E_ALL ^ (E_WARNING | E_NOTICE))</li>
</ul>
-- MySQL 3.x or above
-- MyISAM engine (all tables)
-- 50+ tables (1,896-line SQL file)
-- ~500 KB database size (empty)
-- ~50 MB with game content (maps, monsters, items, quests)
Install Process (install.txt):
<ul>
<li><i class="fa fa-database"></i> Create MySQL database</li>
<li><i class="fa fa-database"></i> Import rpg_tables.sql (1,896 lines)</li>
<li><i class="fa fa-caret-right"></i> Copy neab/ directory to web root</li>
<li><i class="fa fa-cog"></i> Edit config/config.inc:</li>
<li><i class="fa fa-database"></i> $dbuser = database username</li>
<li><i class="fa fa-exclamation-triangle"></i> $dbpass = database password</li>
<li><i class="fa fa-database"></i> $dbname = database name</li>
<li><i class="fa fa-gamepad"></i> $gamecert = random hash (for URL validation)</li>
<li><i class="fa fa-gamepad"></i> $gametitle = your game name</li>
<li><i class="fa fa-file-code-o"></i> Access index.php</li>
<li><i class="fa fa-exclamation-triangle"></i> Login with admin/admin (default credentials)</li>
<li><i class="fa fa-exclamation-triangle"></i> Change admin password immediately</li>
</ul>
Pros:
Cons:
LAMP Stack:
<ul>
<li><i class="fa fa-caret-right"></i> Linux/Windows server</li>
<li><i class="fa fa-caret-right"></i> Apache with mod_rewrite (optional)</li>
<li><i class="fa fa-caret-right"></i> PHP 4.x or 5.x (will NOT work on PHP 7.0+)</li>
<li><i class="fa fa-database"></i> MySQL 3.x-5.x</li>
<li><i class="fa fa-caret-right"></i> 50 MB disk space (minimum)</li>
<li><i class="fa fa-caret-right"></i> GD library for image manipulation</li>
</ul>
Estimated rewrite effort: 200-300 hours (massive codebase).
---
What's Present:
What's Missing:
What's Broken:
Playability Status:
Can Install: YES (if PHP 5.6 available)
Can Register: YES
Can Login: YES (default: admin/admin)
Can Explore Maps: YES
Can Combat: YES
Can Quest: YES
Can Craft: YES
Can Admin: YES (12 visual tools)
Can Run on PHP 7+: NO (requires full rewrite)
Historical Significance:
Comparative Rarity:
In Wild:
To Run on PHP 5.6:
Effort: LOW (4-8 hours)
Edit config/config.inc with database credentials
Import rpg_tables.sql
Change admin password
Test all features
To Run on PHP 7.x+:
Effort: EXTREME (200-300 hours)
Replace ALL mysql_* with mysqli/PDO (98 files!)
Add password hashing (bcrypt)
Switch cookie auth to sessions
Remove eval() from quest system (security risk)
Add prepared statements (SQL injection prevention)
Fix deprecated PHP features (each(), create_function(), etc.)
Test 50+ database tables
Test 12 admin tools
Test all player features
To Modernize (2024 standards):
Effort: EXTREME (500+ hours = complete rewrite)
Framework migration (Laravel, Symfony)
API-based architecture (REST/GraphQL)
Modern frontend (React, Vue)
WebSockets for real-time (replace AJAX)
Canvas/WebGL for 2D maps
Docker deployment
Unit tests
Security audit
In This Collection (Games 1-43):
In Wild:
---
RATING BREAKDOWN:
| Category | Score | Reasoning |
|---|---|---|
| Security | 7/10 | Best SQL injection prevention (abstraction), worst password security (plaintext) |
| Code Quality | 8/10 | Professional modularity, database abstraction, 118 doc files |
| Completeness | 9/10 | Fully functional engine with 12 admin tools, sample content |
| Innovation | 9/10 | AJAX maps (2007!), visual editors, dialog scripting, quest system |
| Playability | 8/10 | Works perfectly on PHP 5.6, broken on PHP 7+ |
| Historical Impact | 7/10 | Regional significance (nowhere-else.org), minimal international spread |
| Preservation Value | 10/10 | A complete game engine |
STRENGTHS:
WEAKNESSES:
Comparison to Collection:
Justification:
Educational Value:
Historical Research:
Restoration Projects:
NEAB Explorer represents professional browser RPG engine development before modern frameworks:
The Lesson: Professional architecture doesn't guarantee security. NEAB Explorer has the best SQL injection prevention (database abstraction with qstr()) but the worst password security (plaintext everywhere) of any game analyzed. This demonstrates that security requires holistic thinking, not just individual best practices. The eval() quest system shows the danger of powerful features without safeguards—admin-created quests can execute arbitrary PHP code.
The Innovation: AJAX maps in 2005-2007 were revolutionary. Modern developers take real-time updates for granted, but NEAB Explorer pioneered XMLHttpRequest-based gameplay when most browser games still used full page refreshes. The visual admin tools (12 web-based editors) anticipated modern game engines (Unity, Unreal, Godot) by providing non-programmers with game creation tools.
Technical Quality: 🏆 Tier 1 (professional engineering, modular architecture)
Security Quality: ⚠️ Mixed (best SQL prevention, worst password storage)
Cultural Value: 🏆 CRITICAL (only game engine, AJAX pioneer, visual editors)
Playability: Fully Functional (PHP 5.6), 💥 Broken (PHP 7+)
Recommendation: PRESERVE as maximum-priority artifact. NEAB Explorer is a complete game engine, representing professional browser RPG development circa 2005-2007. The AJAX-based 2D tile maps and 12 visual admin tools show technical innovation years ahead of competitors. The database abstraction layer demonstrates professional engineering patterns rare in hobbyist projects. However, the plaintext password storage is a catastrophic security oversight that undermines otherwise solid architecture. The 17,035-line codebase, 50+ database tables, and 118 documentation files document an extinct era of browser RPG engine development. With <50 estimated copies worldwide and the original www.nowhere-else.org site defunct, this is a critical cultural artifact requiring preservation before PHP 7+ migration makes it permanently unrunnable.
CRITICAL WARNING: Never deploy with default passwords (admin/admin, player/player). Never use in production without implementing password hashing. Cookie-based auth with plaintext passwords = instant compromise. Eval() in quest system = remote code execution risk. This engine is educational/historical, not production-ready.
---
Archive Status: PRESERVED
Analyst Notes: This is a complete game engine. NEAB Explorer represents professional browser RPG development with AJAX maps (2005-2007 cutting-edge), visual admin tools (12 editors), and database abstraction layer. The 17,035-line codebase with 50+ database tables documents sophisticated game architecture. However, plaintext password storage (database + cookies) is a catastrophic security flaw. The eval() quest system allows arbitrary PHP code execution. Despite flaws, this is a maximum-priority preservation artifact, with <50 estimated copies worldwide and original www.nowhere-else.org site defunct. Unique innovation: AJAX-based 2D tile maps with click-to-move navigation (2007). Team: Alain Bertrand (dev), Sebastian Budijanto (QA), Robert Smith (contributor). License: Proprietary with modification rights.
| Category | Rating | Commentary |
|---|---|---|
| Innovation & Originality | ★★★★★★★★★☆ 9/10 | First true game ENGINE in collection, AJAX 2D maps (2007), modular location system, 12 admin tools |
| Code Quality | ★★★★★★★☆☆☆ 7/10 | Database abstraction, PHP 4/5 auto-detection, 1,297-line utilities, organized structure |
| Security Posture | ★★★☆☆☆☆☆☆☆ 3/10 | Uses qstr() escaping (GOOD), but plaintext passwords in DB + cookies, eval() in quests |
| Documentation | ★★★★★★★★★★ 10/10 | 118 .txt documentation files, install guide, license, comprehensive source docs |
| Gameplay Design | ★★★★★★★★☆☆ 8/10 | Complete RPG engine: 2D maps, combat, crafting, quests, dialogs, monsters, items |
| Technical Architecture | ★★★★★★★★★☆ 9/10 | Modular design, location_modules system, AJAX backend, 50+ database tables, abstraction layer |
| Completeness | ★★★★★★★★★☆ 9/10 | Production-ready v1.3.1, 17,035 lines, 12 admin tools, 118 docs, live game (nowhere-else.org) |
| Historical Significance | ★★★★★★★★★★ 10/10 | Complete game engine, professional team, AJAX pioneer (2005-2007) |
| Preservation Value | ★★★★★★★★★★ 10/10 | Maximum priority: unique engine, <50 copies worldwide, defunct website, comprehensive docs |
Summary: NEAB Explorer v1.3.1 (2005-2007) is a professional browser RPG game engine. Developed by Alain Bertrand's team for "Nowhere Else and Beyond" (www.nowhere-else.org), this mature v1.3.1 release provides 12 web-based admin tools (dialog editor, map editor, quest manager), AJAX-powered 2D tile maps with click-to-move navigation (cutting-edge for 2007), and a modular location system allowing custom location types. With 17,035 lines across 150+ files, 50+ database tables, and 118 documentation files, this represents professional-grade development. The database abstraction layer with qstr() escaping shows security awareness rare for this era. However, plaintext password storage (database + cookies) and eval()-based quest system create severe risks. As a true game engine, with estimated <50 copies worldwide and defunct original site, this is a maximum-priority preservation artifact documenting 2005-2007 browser RPG architecture at its peak.
Running many of the scripts in this archive on a live server presents a serious security risk. These projects were created before modern hardening practices and may contain vulnerabilities that can compromise your system.
We strongly recommend using this code for reference and analysis only, or in isolated local environments. By downloading these files, you accept full responsibility for their use.