[Back to Archer]
Done; Phase 0.0.1-0.7.0: Implement Playermaking admin
1xDo design(World/Prophecies/Story/Species/NPC Conversations/gameplan/submap/magic/status ailments)
2xCreate Databases(Map/Portal/Inventory/Items/chat/mail/NPC Converse/NPC Pathways/NPC-mob/Player)
3xImplement (Login/Playermaking/Stats roller/Appearance Picker/Lolchats Div/Overlays/Debug)
4xFill out overlays(help:changelog/main/help/lore/about)
5xAjax Chat, Meaty overlays, Map update; missing/unwalkable/portals/hotkeys!
6xUpdate map engine with touch-movement, chart prefill, iPhone style, ajax controls, ajax bounds check, back-image changing, PC visibility/Implement admin panel, map editor, tile maker, teleporter
7xServer migration, Map fix, Status tabs, Inventory, Recipes, Details


Phase 0.7-0.8.0 [Story, Coms, Map]
Revamp Lore
Write Storyline
Scavenge ykindean comms system
Implement Mailboxes (compose, read, reply, delete)
Implement NPCs existance/images
Build Image Importer script

Code Map ajax with XML this time
Pane Autoswitcher: Items when stepped on, Quests when got, People when warped, Mail when received
Sound player, Midi player, Mp3 player
Code Map wrappable horizontal -Mage
Scavenge LoL Image Stack Algorithm - Implement Players/Items/NPCs steadfastness (Dynamically update map and status area...) [visible movement not necessary]
Implement other Players/NPCs immediate visible movement/walkunders
Update Appearance picker - Add Heads&Hairs/Bodies to database
-----------------------
Logged out:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /index_title.php:2) in /login32.php on line 4

Notice: Use of undefined constant username - assumed 'username' in /login32.php on line 88
-----------------------




Phase 0.8-0.9.0 [Battles, Quests and Recipes]
custom items/save as item/Item admins(b)/Inventory max-weight?/style="Filter: FlipV"/Make Items
Make Recipes/Recipe admins/Recipe learning?/Recipe Multiple Items!!
Implement NPCs movement/AI (paths, wander, track last move time to keep them slow)
Implement NPCs Conversation system (shop, learn recipes)
Build NPCs/NPC-AI admins(b)
Implement Ykinde-like quests system
Write Quests/Quest admins(b)

Implement parties/vehicles
Scavenge Lavanian battle system - Battle: miss/dodge[dAGI>aDEX+diceroll], parry/hit[dDEX>aSTR+diceroll]

Implement paypal donation system


Phase 0.9-1.0.0 [Battles and Stuff]
Implement Classes/Races
Implement status effects
Implement Summons
Implement magic system
Implement Pets
Implement skills system
Implement Attacks
Implement pvp

Implement Player/Chat admin [kick, ban, delete]
Redo in-game images [Players/Enemies,Helms,Armors,Weapons]


Phase 1.0-1.1.0 [features]
Redesign page layout with better graphics
Design in-game events
Design in-game contests
Design out of game contests
Implement functions for game mechanics
Implement in-game weather
Implement game mechanic; evolution
Implement game mechanic; migration
Implement game mechanic; conversation
Code Map wrappable vertical -Mage


Phase 1.1-1.2.0 [admins]
Implement remote-control admin items
[optimize sql tables?]
[optimize sql queries?]
?Alter admin: add a "sprite/item/portal/barrier"
?Add Map script: Tileblocks (A-Z)
?Define more tileblocks
?Add Map script: Coords Picker
?[make functions to getname, gettime, stack img, etc?]
?Implement site-wide function to add email, ip, date to mailing lists - [Special Promotions] - [CTI News] - [Target Game News]


Phase 1.2-1.3.0 [Laszlo]
MAKE OVER MAP_RENDER IN JS/Laszlo instead of PHP?
ajax: acquire whole tile snapshot (on first load, on portal, (on move temp))
ajax: Implement mapcharts
ajax: acquire tile edge in proper direction when player moves (in js array)
ajax: Implement walkunders
ajax: item commands
ajax: quest commands
ajax: player commands
ajax: mail commands
ajax: character creation
ajax: battles
Phase 1.5.0 [chat]
Implement chat delimiters
Implement autolinked urls
Implement `,:,/
Implement FunctionKeys, CtrlKeys
Implement Emoticons (Ctrl+#?)
Implement settings panel: Font/Sound/Music/Animation

Implement chat commands
Implement worldwide whois /whois /who [id/name]
Implement user logout /quit /logout /q
Implement user refresh rate /refresh [rate]
Implement user description change /desc [description]
Implement user password change /password newpw
Implement server time /time
Implement bug reporting /bug description
Implement player reporting /report player [reason]
Implement worldwide whispers [/tell-whisper-w name/id or /name/id] message
Implement worldwide ignores /ignore /ig /i [name/id]
Implement chat commands overlay /commands
Implement command shortcuts overlay /shortcuts
[map] Implement locality-specific chat and commands
Implement locality-specific emote /me /m /e :
Implement groupwide tells /gsay /gtell /g
Implement submap-specific shouts /shout /yell /y
[map item] Implement local info overlays
Implement local objects overlay /look /examine
Implement local character overlay /l /ex [id/name]
Implement local npc overlay /l /ex [-id/name]
Implement local item overlay /l /ex [name]

Implement basic admin commands
Implement worldwide broadcasts /broad message
Implement player name change /renick [id/name] name
[map] Implement admin map commands
Implement tile change /floor to-type [from-x/y] [to-x/y] [on map z]
Implement portal creation /port [image] to-XY,Z [from-xy,z]
Implement toggleable spectator mode /spec /unspec [playerid/name]/[xy,z]
Implement weather change /weather type
Implement GM visibility /viz /invisible /visible
Implement player targetting /goto player
Implement player summoning /summon player
Implement player location randomizing /send player [z]
Implement player zone banishing /banish player [z] (one zone at a time?)
[map item] Implement admin gifts
Implement player health /heal [id/name] percent
Implement player gifts /give [id/name] item /pay [id/name] amount
Implement player godmode /god /ungod [id/name]
Implement mass healing /healall percent
Implement mass gift /giveall item /payall amount
Implement mass godmode /godall /ungodall
Implement player relocate /push [id] xy,z
[map item] Implement admin penalties
Implement login standstill /lockserver /unlockserver
Implement server clear /kickall (except for gm)
Implement player health /hurt [id/name] percent
Implement player penalties /take /charge [id/name] item
Implement player standstill /freeze /unfreeze [id/name]
Implement player ban /ban /unban [ip/name/id]
Implement player equipment removal /disarm player
Implement player money removal /bankrupt player
Implement player de-voice /mute player
Implement admin item and mob commands
Implement item creation /make type [xy,z]
Implement mob creation /spawn type xy,z
Implement item relocate /move id [xy,z]
Implement mob relocate /place id xy,z
Implement item copying /rep id [xy,z]
Implement mob copying /clone id xy,z
Implement item destruct /erase id
Implement mob destruct /kill id
 [Chat area] Done?


[tinyint1]int[varchar32]text[timestamp]float tinyint1{Sleep Stack WalkableTile PortalTile BuildingTile NpcExist ItemExist Read NPCAgro NPCKill NPCRez NPCIntel TakeorGive} int8{Species Appear1 Appear2 Class Stre Inte Stam Agil Ailment HealPercent Money} int10-uns{HP MP Level} int11{PlayerID AccountID Zone Server XLoc YLoc ItemID ItemCount ItemType ItemVar TerrainType Stat NPCNum NPCPic AIType Pathway Checkpoint ConverseID ThreadID Cost HealPercent} varchar15{ip} varchar32{Name Zonename NPCname Subject ChoiceText} text{message ItemDesc ConverSay} timestamp{Last Made Sent} float-uns{EXP Weight Worth Percent}
Magic: Stop/Start-Slow/Fast-Return/Exit-Good/Bad-Free/Call-Raise/Lower Know/Find/Fear/Confuse/Make/Be/Burn/Imbue/Protect/Adorn Advoco(call) Argentum(money) Bene(good) Bestia(animal) Carpe(stop) Cubile(home) Decoro(adorn) Deus(god) Extollo(raise) Ego(self) Fiat(make) Fontes(source) Grassor(hurt) Gens(species) Hesito(confuse) Hospes(target) Imbuo(imbue) Ignis(fire) Jugiter(fast) Jaculum(dart) Libero(free) Lux(light) Malum(bad) Materia(stuff) Nosco(know) Nunc(time) Origo(start) Orbis(earth) Patronus(prot) Penetalia(inside) Quaero(find) Quietus(sleep) Repeto(return) Rem(place) Summissus(lowr) Spiritu(spirit) Torpeo(slow) Taceo(silence) Ustulo(burn) Usus(skill) Verto(exit) Venenum(poison) Ymber(shower) Ymber(water)
Stats: asleep (or sleep): The character is asleep cannot act during battle. If the character is struck, there is a chance that the he will wake up. Asleep status is not usually carried from battle to battle and expires at the battle end. blind: The character suffers a severe penalty to attack rolls. confused: The character is confused. The character cannot be controlled by the player during battle and will attack both friend and foe randomly when he takes an action. Confusion usually goes away at the end of battle. dead: The character is dead. Dead status can be inflicted instantly or is automatic when the hit points of a character reaches 0 or below. While dead, the character cannot perform any action until he is raised. frozen: The frozen status is identical to the petrified status (see below) except that it usually expires at the end of battle. petrified: The petrified status is similar to the death status except that it does not require the character's hit points to reach zero. It usually does not expire. It must be cured. poisoned: The poisoned status state inflicts a set amount of damage after the character acts in battle and sometimes every time he takes a step outside of battle. In some RPGs, poison status does not expire and must be cured. In others, it naturally expires at the end of battle. zombie: The character has become a zombie. The zombie status causes healing spells and items to cause damage when used on the character. Also, attempts at bringing the character back to life by normal means could cause instant death or significant damage. Often damage is lessened when a character has the zombie status. DW Magus: Top left corner will be 0,0 of the viewscreen. S.A.M.: ok DW Magus: Viewscreen (top, left, width, height) will be your (0, 0, viewscreen_X, viewscreen_y) DW Magus: At least to start or similar. DW Magus: What this means is that whenever the char will move left, you only need to add 1 to the left var, when they move down, you add 1 to the top var. DW Magus: Since your height and width (for the moment, but can be done dynamically) are static, then we know pretty much the 'range' of tiles on screen at any given time. DW Magus: This works really well when the map is larger than the viewscreen and not wrapping. DW Magus: So, we now need to take into account the fact it wraps. DW Magus: I'm going to use concrete numbers for ease of use right now. DW Magus: Simple numbers as well. DW Magus: MapWidth = 100; MapHeight = 100; ViewWidth = 10; ViewHeight = 10; ViewX = 0, ViewY = 0; DW Magus: When the player clicks right, we add 1 to ViewX, or ViewX++; DW Magus: Wait, erase last line. DW Magus: We retrieve all tiles from ViewX to ViewX + ViewWidth. DW Magus: We retrieve all tiles from ViewY to ViewY + ViewHeight. DW Magus: Nested loop there (at least in C). DW Magus: Row by row, column by column. DW Magus: Then, when the player clicks right, we add 1 to ViewX. DW Magus: The same fetching algorithm now retrieves tiles from 1 to 1 + 10 (11) and same with height. DW Magus: When they click right, we add 1 to ViewX, when they click down, we add 1 to ViewY. A diagonal down left will add 1 to both, and opposite directions subtract one. DW Magus: Now, say we reach the edge of the map. DW Magus: We're sitting at 90,90 DW Magus: We currently have fetched 90 - 90 + 10 (100) in both directions. DW Magus: Now, the player clicks right again. DW Magus: We want to try and fetch 91 through 91 + 10 (101). DW Magus: This isn't possible. Out of bounds on the array. DW Magus: So inside our fetching algorithm, we need to check to see if we're at the edge. DW Magus: If ViewX + ViewWidth > MapWidth DW Magus: This tells us whether or not ANY tiles we're requesting are out of bounds on that array. DW Magus: If that is true, it means we are requesting tiles out of bounds. DW Magus: So now, we drop down into another part instead of the original. DW Magus: If (RequestedTile > MapX) then RequestedTile = RequestedTile - MapX DW Magus: This will force it to subtract the 100 from the 101, which leaves us with 1. DW Magus: So now, the requested tile is 1 instead of 101. DW Magus: This works fine until our ViewX moves out of the array boundary as well. DW Magus: We need to make sure whenever the person clicks right, that we check that first. DW Magus: If ViewX > MapX then ViewX = ViewX - MapX DW Magus: This resets our viewscreen back to the other side. DW Magus: Now, if you code this recursiveey, you should be able to get wrapping now matter how small the map is. DW Magus: If it's not recursive, you only get one extra instance of your original map. DW Magus: My suggestions? DW Magus: Don't do it recursively. Too many things can go wrong if you mess up one bit. DW Magus: Make sure the maps are at least a certain size when they need to wrap.