Editor Improvements

Added possibility to write separate explanations for different entities and fixed a bug.
This commit is contained in:
HamidReza 2021-08-27 18:36:27 +04:30
parent a8c36540e5
commit 8dbefa734f
3 changed files with 539 additions and 459 deletions

View file

@ -2392,7 +2392,12 @@ void CEditor::DoMapEditor(CUIRect View)
Layer = LAYER_TUNE; Layer = LAYER_TUNE;
} }
if(m_ShowPicker && Layer != NUM_LAYERS) if(m_ShowPicker && Layer != NUM_LAYERS)
m_pTooltip = Explain((int)wx / 32 + (int)wy / 32 * 16, Layer); {
if(m_SelectEntitiesImage == "DDNet")
m_pTooltip = Explain(EXPLANATION_DDNET, (int)wx / 32 + (int)wy / 32 * 16, Layer);
else if(m_SelectEntitiesImage == "FNG")
m_pTooltip = Explain(EXPLANATION_FNG, (int)wx / 32 + (int)wy / 32 * 16, Layer);
}
else if(m_Brush.IsEmpty()) else if(m_Brush.IsEmpty())
m_pTooltip = "Use left mouse button to drag and create a brush. Hold shift to select multiple quads."; m_pTooltip = "Use left mouse button to drag and create a brush. Hold shift to select multiple quads.";
else else

View file

@ -1060,7 +1060,34 @@ public:
void AddFileDialogEntry(int Index, CUIRect *pView); void AddFileDialogEntry(int Index, CUIRect *pView);
void SelectGameLayer(); void SelectGameLayer();
void SortImages(); void SortImages();
static const char *Explain(int Tile, int Layer);
//Tile Numbers For Explanations - TODO: Add/Improve tiles and explanations
enum
{
TILE_FNG_AIR,
TILE_FNG_HOOKABLE,
TILE_FNG_DEATH,
TILE_FNG_UNHOOKABLE,
TILE_FNG_SPIKE_GOLD = 7,
TILE_FNG_SPIKE_NORMAL,
TILE_FNG_SPIKE_RED,
TILE_FNG_SPIKE_BLUE,
TILE_FNG_SPIKE_GREEN = 14,
TILE_FNG_SPIKE_PURPLE
};
//Explanations
enum
{
EXPLANATION_DDNET,
EXPLANATION_FNG,
EXPLANATION_RACE,
EXPLANATION_VANILLA,
EXPLANATION_BLOCKWORLDS
};
static const char *Explain(int ExplanationID, int Tile, int Layer);
int GetLineDistance() const; int GetLineDistance() const;
void ZoomMouseTarget(float ZoomFactor); void ZoomMouseTarget(float ZoomFactor);

View file

@ -1,463 +1,511 @@
#include "editor.h" #include "editor.h"
// Explanations by Lady Saavik // DDNet entity explanations by Lady Saavik
const char *CEditor::Explain(int Tile, int Layer) const char *CEditor::Explain(int ExplanationID, int Tile, int Layer) //TODO: Add other entities' tiles' explanations and improve new ones
{ {
switch(Tile) if(ExplanationID == EXPLANATION_DDNET)
{ {
case TILE_AIR: switch(Tile)
return "EMPTY: Can be used as an eraser."; {
case TILE_SOLID: case TILE_AIR:
if(Layer == LAYER_GAME) return "EMPTY: Can be used as an eraser.";
return "HOOKABLE: It's possible to hook and collide with it."; case TILE_SOLID:
break; if(Layer == LAYER_GAME)
case TILE_DEATH: return "HOOKABLE: It's possible to hook and collide with it.";
if(Layer == LAYER_GAME) break;
return "KILL: Kills the tee."; case TILE_DEATH:
break; if(Layer == LAYER_GAME)
case TILE_NOHOOK: return "KILL: Kills the tee.";
if(Layer == LAYER_GAME) break;
return "UNHOOKABLE: It's not possible to hook it, but can collide with it."; case TILE_NOHOOK:
break; if(Layer == LAYER_GAME)
case TILE_NOLASER: return "UNHOOKABLE: It's not possible to hook it, but can collide with it.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "LASER BLOCKER: Doesn't let DRAGGIN & SPINNING LASER and PLASMA TURRET reach tees through it."; case TILE_NOLASER:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_THROUGH_CUT: return "LASER BLOCKER: Doesn't let DRAGGIN & SPINNING LASER and PLASMA TURRET reach tees through it.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "HOOKTHROUGH: Shortcut for new hookthrough."; case TILE_THROUGH_CUT:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_THROUGH_ALL: return "HOOKTHROUGH: Shortcut for new hookthrough.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "HOOKTHROUGH: Combined with a collision tile is new hookthrough, otherwise stops hooks, from all directions."; case TILE_THROUGH_ALL:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_THROUGH_DIR: return "HOOKTHROUGH: Combined with a collision tile is new hookthrough, otherwise stops hooks, from all directions.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "HOOKTHROUGH: Combined with a collision tile is new hookthrough, otherwise stops hook, from one direction."; case TILE_THROUGH_DIR:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_THROUGH: return "HOOKTHROUGH: Combined with a collision tile is new hookthrough, otherwise stops hook, from one direction.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "HOOKTHROUGH: Combined with (UN)HOOKABLE tiles, allows to hook through the walls."; case TILE_THROUGH:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_JUMP: return "HOOKTHROUGH: Combined with (UN)HOOKABLE tiles, allows to hook through the walls.";
if(Layer == LAYER_SWITCH) break;
return "JUMP: Sets defined amount of jumps (default is 2)."; case TILE_JUMP:
break; if(Layer == LAYER_SWITCH)
case TILE_FREEZE: return "JUMP: Sets defined amount of jumps (default is 2).";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "FREEZE: Freezes tees for 3 seconds."; case TILE_FREEZE:
if(Layer == LAYER_SWITCH) if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
return "FREEZE: Freezes tees for defined amount of seconds."; return "FREEZE: Freezes tees for 3 seconds.";
break; if(Layer == LAYER_SWITCH)
case TILE_UNFREEZE: return "FREEZE: Freezes tees for defined amount of seconds.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "UNFREEZE: Unfreezes tees immediately."; case TILE_UNFREEZE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_TELEINEVIL: return "UNFREEZE: Unfreezes tees immediately.";
if(Layer == LAYER_TELE) break;
return "RED TELEPORT: After falling into this tile, tees appear on TO with the same number. Speed and hooks are reset."; case TILE_TELEINEVIL:
break; if(Layer == LAYER_TELE)
case TILE_DFREEZE: return "RED TELEPORT: After falling into this tile, tees appear on TO with the same number. Speed and hooks are reset.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "DEEP FREEZE: Permanent freeze. Only UNDEEP tile can cancel this effect."; case TILE_DFREEZE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case TILE_DUNFREEZE: return "DEEP FREEZE: Permanent freeze. Only UNDEEP tile can cancel this effect.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "UNDEEP: Removes DEEP FREEZE effect."; case TILE_DUNFREEZE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case TILE_TELEINWEAPON: return "UNDEEP: Removes DEEP FREEZE effect.";
if(Layer == LAYER_TELE) break;
return "WEAPON TELEPORT: Teleports bullets shot into it to TELEPORT TO, where it comes out. Direction, angle and length are kept."; case TILE_TELEINWEAPON:
break; if(Layer == LAYER_TELE)
case TILE_TELEINHOOK: return "WEAPON TELEPORT: Teleports bullets shot into it to TELEPORT TO, where it comes out. Direction, angle and length are kept.";
if(Layer == LAYER_TELE) break;
return "HOOK TELEPORT: Teleports hooks entering into it to TELEPORT TO, where it comes out. Direction, angle and length are kept."; case TILE_TELEINHOOK:
break; if(Layer == LAYER_TELE)
case TILE_WALLJUMP: return "HOOK TELEPORT: Teleports hooks entering into it to TELEPORT TO, where it comes out. Direction, angle and length are kept.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "WALLJUMP: Placed next to a wall. Enables climbing up the wall."; case TILE_WALLJUMP:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_EHOOK_ENABLE: return "WALLJUMP: Placed next to a wall. Enables climbing up the wall.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "ENDLESS HOOK: Activates endless hook."; case TILE_EHOOK_ENABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_EHOOK_DISABLE: return "ENDLESS HOOK: Activates endless hook.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "ENDLESS HOOK OFF: Deactivates endless hook."; case TILE_EHOOK_DISABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_HIT_ENABLE: return "ENDLESS HOOK OFF: Deactivates endless hook.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "HIT OTHERS: You can hit others."; case TILE_HIT_ENABLE:
if(Layer == LAYER_SWITCH) if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
return "HIT OTHERS: You can activate hitting others for single weapons, using delay number to select which."; return "HIT OTHERS: You can hit others.";
break; if(Layer == LAYER_SWITCH)
case TILE_HIT_DISABLE: return "HIT OTHERS: You can activate hitting others for single weapons, using delay number to select which.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "HIT OTHERS: You can't hit others."; case TILE_HIT_DISABLE:
if(Layer == LAYER_SWITCH) if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
return "HIT OTHERS: You can deactivate hitting others for single weapons, using delay number to select which."; return "HIT OTHERS: You can't hit others.";
break; if(Layer == LAYER_SWITCH)
case TILE_SOLO_ENABLE: return "HIT OTHERS: You can deactivate hitting others for single weapons, using delay number to select which.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "SOLO: You are now in a solo part."; case TILE_SOLO_ENABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_SOLO_DISABLE: // also TILE_SWITCHTIMEDOPEN return "SOLO: You are now in a solo part.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "SOLO: You are now out of the solo part."; case TILE_SOLO_DISABLE: // also TILE_SWITCHTIMEDOPEN
if(Layer == LAYER_SWITCH) if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
return "TIME SWITCH: Activates switch (e.g. closes door) with the same number for a set amount of seconds."; return "SOLO: You are now out of the solo part.";
break; if(Layer == LAYER_SWITCH)
case TILE_SWITCHTIMEDCLOSE: return "TIME SWITCH: Activates switch (e.g. closes door) with the same number for a set amount of seconds.";
if(Layer == LAYER_SWITCH) break;
return "TIME SWITCH: Deactivates switch (e.g. opens door) with the same number for a set amount of seconds."; case TILE_SWITCHTIMEDCLOSE:
break; if(Layer == LAYER_SWITCH)
case TILE_SWITCHOPEN: return "TIME SWITCH: Deactivates switch (e.g. opens door) with the same number for a set amount of seconds.";
if(Layer == LAYER_SWITCH) break;
return "SWITCH: Activates switch (e.g. closes door) with the same number."; case TILE_SWITCHOPEN:
break; if(Layer == LAYER_SWITCH)
case TILE_SWITCHCLOSE: return "SWITCH: Activates switch (e.g. closes door) with the same number.";
if(Layer == LAYER_SWITCH) break;
return "SWITCH: Deactivates switch (e.g. opens door) with the same number."; case TILE_SWITCHCLOSE:
break; if(Layer == LAYER_SWITCH)
case TILE_TELEIN: return "SWITCH: Deactivates switch (e.g. opens door) with the same number.";
if(Layer == LAYER_TELE) break;
return "BLUE TELEPORT: After falling into this tile, tees appear on TO with the same number. Speed and hook are kept."; case TILE_TELEIN:
break; if(Layer == LAYER_TELE)
case TILE_TELEOUT: return "BLUE TELEPORT: After falling into this tile, tees appear on TO with the same number. Speed and hook are kept.";
if(Layer == LAYER_TELE) break;
return "TELEPORT TO: Destination tile for FROMs, WEAPON & HOOK TELEPORTs with the same numbers."; case TILE_TELEOUT:
break; if(Layer == LAYER_TELE)
case TILE_BOOST: return "TELEPORT TO: Destination tile for FROMs, WEAPON & HOOK TELEPORTs with the same numbers.";
if(Layer == LAYER_SPEEDUP) break;
return "SPEEDUP: Gives tee defined speed. Arrow shows direction and angle."; case TILE_BOOST:
break; if(Layer == LAYER_SPEEDUP)
case TILE_TELECHECK: return "SPEEDUP: Gives tee defined speed. Arrow shows direction and angle.";
if(Layer == LAYER_TELE) break;
return "CHECKPOINT TELEPORT: After having touched this tile, any CFRM will teleport you to CTO with the same number."; case TILE_TELECHECK:
break; if(Layer == LAYER_TELE)
case TILE_TELECHECKOUT: return "CHECKPOINT TELEPORT: After having touched this tile, any CFRM will teleport you to CTO with the same number.";
if(Layer == LAYER_TELE) break;
return "CHECKPOINT TELEPORT TO: Tees will appear here after touching TELEPORT CHECKPOINT with the same number and falling into CFROM TELEPORT."; case TILE_TELECHECKOUT:
break; if(Layer == LAYER_TELE)
case TILE_TELECHECKIN: return "CHECKPOINT TELEPORT TO: Tees will appear here after touching TELEPORT CHECKPOINT with the same number and falling into CFROM TELEPORT.";
if(Layer == LAYER_TELE) break;
return "BLUE CHECKPOINT TELEPORT: Sends tees to CTO with the same number as the last touched TELEPORT CHECKPOINT. Speed and hook are kept."; case TILE_TELECHECKIN:
break; if(Layer == LAYER_TELE)
case TILE_REFILL_JUMPS: return "BLUE CHECKPOINT TELEPORT: Sends tees to CTO with the same number as the last touched TELEPORT CHECKPOINT. Speed and hook are kept.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "REFILL JUMPS: Restores all jumps."; case TILE_REFILL_JUMPS:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_START: return "REFILL JUMPS: Restores all jumps.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "START: Starts counting your race time."; case TILE_START:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_FINISH: return "START: Starts counting your race time.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "FINISH: End of race."; case TILE_FINISH:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_STOP: return "FINISH: End of race.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "STOPPER: You can hook and shoot through it. You can't go through it against the arrow."; case TILE_STOP:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_STOPS: return "STOPPER: You can hook and shoot through it. You can't go through it against the arrow.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "STOPPER: You can hook and shoot through it. You can't go through it against the arrows."; case TILE_STOPS:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_STOPA: return "STOPPER: You can hook and shoot through it. You can't go through it against the arrows.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "STOPPER: You can hook and shoot through it. You can't go through it."; case TILE_STOPA:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_TELECHECKINEVIL: return "STOPPER: You can hook and shoot through it. You can't go through it.";
if(Layer == LAYER_TELE) break;
return "RED CHECKPOINT TELEPORT: Send tees to CTO with the same number as the last touched TELEPORT CHECKPOINT. Speed and hook are reset."; case TILE_TELECHECKINEVIL:
break; if(Layer == LAYER_TELE)
case TILE_CP: return "RED CHECKPOINT TELEPORT: Send tees to CTO with the same number as the last touched TELEPORT CHECKPOINT. Speed and hook are reset.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "SPEEDER: Causes weapons, SHIELD, HEART and SPINNING LASER to move slowly."; case TILE_CP:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_CP_F: return "SPEEDER: Causes weapons, SHIELD, HEART and SPINNING LASER to move slowly.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "SPEEDER: Causes weapons, SHIELD, HEART and SPINNING LASER to move quickly."; case TILE_CP_F:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_TUNE: return "SPEEDER: Causes weapons, SHIELD, HEART and SPINNING LASER to move quickly.";
if(Layer == LAYER_TUNE) break;
return "TUNE ZONE: Area where defined tunes work."; case TILE_TUNE:
break; if(Layer == LAYER_TUNE)
case TILE_OLDLASER: return "TUNE ZONE: Area where defined tunes work.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "GLOBAL OLD SHOTGUN: Shotgun drags others always towards the shooter, even after having bounced. Shooter can't hit themselves. Place only one tile somewhere on the map."; case TILE_OLDLASER:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_NPC: return "GLOBAL OLD SHOTGUN: Shotgun drags others always towards the shooter, even after having bounced. Shooter can't hit themselves. Place only one tile somewhere on the map.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "GLOBAL COLLISION OFF: Nobody can collide with others. Place only one tile somewhere on the map."; case TILE_NPC:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_EHOOK: return "GLOBAL COLLISION OFF: Nobody can collide with others. Place only one tile somewhere on the map.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "GLOBAL ENDLESS HOOK ON: Everyone has endless hook. Place only one tile somewhere on the map."; case TILE_EHOOK:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_NOHIT: return "GLOBAL ENDLESS HOOK ON: Everyone has endless hook. Place only one tile somewhere on the map.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "GLOBAL HIT OTHERS OFF: Nobody can hit others. Place only one tile somewhere on the map."; case TILE_NOHIT:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_NPH: return "GLOBAL HIT OTHERS OFF: Nobody can hit others. Place only one tile somewhere on the map.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "GLOBAL HOOK OTHERS OFF: Nobody can hook others. Place only one tile somewhere on the map."; case TILE_NPH:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_UNLOCK_TEAM: return "GLOBAL HOOK OTHERS OFF: Nobody can hook others. Place only one tile somewhere on the map.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "UNLOCK TEAM: Forces team to be unlocked so that team doesn't get killed when one dies."; case TILE_UNLOCK_TEAM:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_ADD_TIME: return "UNLOCK TEAM: Forces team to be unlocked so that team doesn't get killed when one dies.";
if(Layer == LAYER_SWITCH) break;
return "PENALTY: Adds time to your current race time. Opposite of BONUS."; case TILE_ADD_TIME:
break; if(Layer == LAYER_SWITCH)
case TILE_NPC_DISABLE: return "PENALTY: Adds time to your current race time. Opposite of BONUS.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "COLLISION OFF: You can't collide with others."; case TILE_NPC_DISABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_UNLIMITED_JUMPS_DISABLE: return "COLLISION OFF: You can't collide with others.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "SUPER JUMP OFF: You don't have unlimited air jumps."; case TILE_UNLIMITED_JUMPS_DISABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_JETPACK_DISABLE: return "SUPER JUMP OFF: You don't have unlimited air jumps.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "JETPACK OFF: You lose your jetpack gun."; case TILE_JETPACK_DISABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_NPH_DISABLE: return "JETPACK OFF: You lose your jetpack gun.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "HOOK OTHERS OFF: You can't hook others."; case TILE_NPH_DISABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_SUBTRACT_TIME: return "HOOK OTHERS OFF: You can't hook others.";
if(Layer == LAYER_SWITCH) break;
return "BONUS: Subtracts time from your current race time. Opposite of PENALTY."; case TILE_SUBTRACT_TIME:
break; if(Layer == LAYER_SWITCH)
case TILE_NPC_ENABLE: return "BONUS: Subtracts time from your current race time. Opposite of PENALTY.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "COLLISION: You can collide with others."; case TILE_NPC_ENABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_UNLIMITED_JUMPS_ENABLE: return "COLLISION: You can collide with others.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "SUPER JUMP: You have unlimited air jumps."; case TILE_UNLIMITED_JUMPS_ENABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_JETPACK_ENABLE: return "SUPER JUMP: You have unlimited air jumps.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "JETPACK: You have a jetpack gun."; case TILE_JETPACK_ENABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_NPH_ENABLE: return "JETPACK: You have a jetpack gun.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "HOOK OTHERS: You can hook others."; case TILE_NPH_ENABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_CREDITS_1: return "HOOK OTHERS: You can hook others.";
case TILE_CREDITS_2: break;
case TILE_CREDITS_3: case TILE_CREDITS_1:
case TILE_CREDITS_4: case TILE_CREDITS_2:
case TILE_CREDITS_5: case TILE_CREDITS_3:
case TILE_CREDITS_6: case TILE_CREDITS_4:
case TILE_CREDITS_7: case TILE_CREDITS_5:
case TILE_CREDITS_8: case TILE_CREDITS_6:
return "CREDITS: Who designed the entities."; case TILE_CREDITS_7:
case TILE_ENTITIES_OFF_1: case TILE_CREDITS_8:
case TILE_ENTITIES_OFF_2: return "CREDITS: Who designed the entities.";
return "ENTITIES OFF SIGN: Informs people playing with entities about important marks, tips, information or text on the map."; case TILE_ENTITIES_OFF_1:
// Entities case TILE_ENTITIES_OFF_2:
case ENTITY_OFFSET + ENTITY_SPAWN: return "ENTITIES OFF SIGN: Informs people playing with entities about important marks, tips, information or text on the map.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) // Entities
return "SPAWN: Here tees will appear after joining the game or dying somewhere on the map."; case ENTITY_OFFSET + ENTITY_SPAWN:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case ENTITY_OFFSET + ENTITY_SPAWN_RED: return "SPAWN: Here tees will appear after joining the game or dying somewhere on the map.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "SPAWN: Red team members spawn here, same as normal spawn in DDRace."; case ENTITY_OFFSET + ENTITY_SPAWN_RED:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case ENTITY_OFFSET + ENTITY_SPAWN_BLUE: return "SPAWN: Red team members spawn here, same as normal spawn in DDRace.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "SPAWN: Blue team members spawn here, same as normal spawn in DDRace."; case ENTITY_OFFSET + ENTITY_SPAWN_BLUE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case ENTITY_OFFSET + ENTITY_FLAGSTAND_RED: return "SPAWN: Blue team members spawn here, same as normal spawn in DDRace.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "FLAG: Not used in DDRace. Place where red team flag is."; case ENTITY_OFFSET + ENTITY_FLAGSTAND_RED:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case ENTITY_OFFSET + ENTITY_FLAGSTAND_BLUE: return "FLAG: Not used in DDRace. Place where red team flag is.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "FLAG: Not used in DDRace. Place where blue team flag is."; case ENTITY_OFFSET + ENTITY_FLAGSTAND_BLUE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case ENTITY_OFFSET + ENTITY_ARMOR_1: return "FLAG: Not used in DDRace. Place where blue team flag is.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "SHIELD: Takes all weapons (except hammer and pistol) away."; case ENTITY_OFFSET + ENTITY_ARMOR_1:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_HEALTH_1: return "SHIELD: Takes all weapons (except hammer and pistol) away.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "HEART: Works like a FREEZE tile. Freezes tees for 3 seconds by default."; case ENTITY_OFFSET + ENTITY_HEALTH_1:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_WEAPON_SHOTGUN: return "HEART: Works like a FREEZE tile. Freezes tees for 3 seconds by default.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "SHOTGUN: Drags the tees towards it. Bounces off the walls."; case ENTITY_OFFSET + ENTITY_WEAPON_SHOTGUN:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_WEAPON_GRENADE: return "SHOTGUN: Drags the tees towards it. Bounces off the walls.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "GRENADE LAUNCHER: Throws exploding bullets. Also known as rocket."; case ENTITY_OFFSET + ENTITY_WEAPON_GRENADE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_POWERUP_NINJA: return "GRENADE LAUNCHER: Throws exploding bullets. Also known as rocket.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "NINJA: Makes you invisible in the darkest nights."; case ENTITY_OFFSET + ENTITY_POWERUP_NINJA:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_WEAPON_LASER: return "NINJA: Makes you invisible in the darkest nights.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "LASER: Unfreezes hit tee. Bounces off the walls. Also known as laser."; case ENTITY_OFFSET + ENTITY_WEAPON_LASER:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_FAST_CCW: return "LASER: Unfreezes hit tee. Bounces off the walls. Also known as laser.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "SPINNING LASER: Tile where freezing laser (made with LASER LENGTH) begins. Counter-Clockwise, fast."; case ENTITY_OFFSET + ENTITY_LASER_FAST_CCW:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_NORMAL_CCW: return "SPINNING LASER: Tile where freezing laser (made with LASER LENGTH) begins. Counter-Clockwise, fast.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "SPINNING LASER: Tile where freezing laser (made with LASER LENGTH) begins. Counter-Clockwise, medium speed."; case ENTITY_OFFSET + ENTITY_LASER_NORMAL_CCW:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_SLOW_CCW: return "SPINNING LASER: Tile where freezing laser (made with LASER LENGTH) begins. Counter-Clockwise, medium speed.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "SPINNING LASER: Tile where freezing laser (made with LASER LENGTH) begins. Counter-Clockwise, slow."; case ENTITY_OFFSET + ENTITY_LASER_SLOW_CCW:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_STOP: return "SPINNING LASER: Tile where freezing laser (made with LASER LENGTH) begins. Counter-Clockwise, slow.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "NON-SPINNING LASER: Tile where freezing laser (made with LASER LENGTH) begins."; case ENTITY_OFFSET + ENTITY_LASER_STOP:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_SLOW_CW: return "NON-SPINNING LASER: Tile where freezing laser (made with LASER LENGTH) begins.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "SPINNING LASER: Tile where freezing laser (made with LASER LENGTH) begins. Clockwise, slow."; case ENTITY_OFFSET + ENTITY_LASER_SLOW_CW:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_NORMAL_CW: return "SPINNING LASER: Tile where freezing laser (made with LASER LENGTH) begins. Clockwise, slow.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "SPINNING LASER: Tile where freezing laser (made with LASER LENGTH) begins. Clockwise, medium speed."; case ENTITY_OFFSET + ENTITY_LASER_NORMAL_CW:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_FAST_CW: return "SPINNING LASER: Tile where freezing laser (made with LASER LENGTH) begins. Clockwise, medium speed.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "SPINNING LASER: Tile where freezing laser (made with LASER LENGTH) begins. Clockwise, fast."; case ENTITY_OFFSET + ENTITY_LASER_FAST_CW:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_SHORT: return "SPINNING LASER: Tile where freezing laser (made with LASER LENGTH) begins. Clockwise, fast.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "LASER LENGTH: Put next to DOOR or SPINNING LASER, makes it 3 tiles long."; case ENTITY_OFFSET + ENTITY_LASER_SHORT:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_MEDIUM: return "LASER LENGTH: Put next to DOOR or SPINNING LASER, makes it 3 tiles long.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "LASER LENGTH: Put next to DOOR or SPINNING LASER, makes it 6 tiles long."; case ENTITY_OFFSET + ENTITY_LASER_MEDIUM:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_LONG: return "LASER LENGTH: Put next to DOOR or SPINNING LASER, makes it 6 tiles long.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "LASER LENGTH: Put next to DOOR or SPINNING LASER, makes it 9 tiles long."; case ENTITY_OFFSET + ENTITY_LASER_LONG:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_C_SLOW: return "LASER LENGTH: Put next to DOOR or SPINNING LASER, makes it 9 tiles long.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "LASER LENGTH CHANGE: Put next to LASER LENGTH, causes it to length and shorten constantly. Works only on (NON-)SPINNING LASER, not on DOOR. Lengthen, slow."; case ENTITY_OFFSET + ENTITY_LASER_C_SLOW:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_C_NORMAL: return "LASER LENGTH CHANGE: Put next to LASER LENGTH, causes it to length and shorten constantly. Works only on (NON-)SPINNING LASER, not on DOOR. Lengthen, slow.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "LASER LENGTH CHANGE: Put next to LASER LENGTH, causes it to length and shorten constantly. Works only on (NON-)SPINNING LASER, not on DOOR. Lengthen, medium speed."; case ENTITY_OFFSET + ENTITY_LASER_C_NORMAL:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_C_FAST: return "LASER LENGTH CHANGE: Put next to LASER LENGTH, causes it to length and shorten constantly. Works only on (NON-)SPINNING LASER, not on DOOR. Lengthen, medium speed.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "LASER LENGTH CHANGE: Put next to LASER LENGTH, causes it to length and shorten constantly. Works only on (NON-)SPINNING LASER, not on DOOR. Lengthen, fast."; case ENTITY_OFFSET + ENTITY_LASER_C_FAST:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_O_SLOW: return "LASER LENGTH CHANGE: Put next to LASER LENGTH, causes it to length and shorten constantly. Works only on (NON-)SPINNING LASER, not on DOOR. Lengthen, fast.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "LASER LENGTH CHANGE: Put next to LASER LENGTH, causes it to length and shorten constantly. Works only on (NON-)SPINNING LASER, not on DOOR. Shorten, slow."; case ENTITY_OFFSET + ENTITY_LASER_O_SLOW:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_O_NORMAL: return "LASER LENGTH CHANGE: Put next to LASER LENGTH, causes it to length and shorten constantly. Works only on (NON-)SPINNING LASER, not on DOOR. Shorten, slow.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "LASER LENGTH CHANGE: Put next to LASER LENGTH, causes it to length and shorten constantly. Works only on (NON-)SPINNING LASER, not on DOOR. Shorten, medium speed."; case ENTITY_OFFSET + ENTITY_LASER_O_NORMAL:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_LASER_O_FAST: return "LASER LENGTH CHANGE: Put next to LASER LENGTH, causes it to length and shorten constantly. Works only on (NON-)SPINNING LASER, not on DOOR. Shorten, medium speed.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "LASER LENGTH CHANGE: Put next to LASER LENGTH, causes it to length and shorten constantly. Works only on (NON-)SPINNING LASER, not on DOOR. Shorten, fast."; case ENTITY_OFFSET + ENTITY_LASER_O_FAST:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_PLASMAE: return "LASER LENGTH CHANGE: Put next to LASER LENGTH, causes it to length and shorten constantly. Works only on (NON-)SPINNING LASER, not on DOOR. Shorten, fast.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "PLASMA TURRET: Shoots plasma bullets at the closest tee. They explode on an obstactle they hit (wall or tee)."; case ENTITY_OFFSET + ENTITY_PLASMAE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_PLASMAF: return "PLASMA TURRET: Shoots plasma bullets at the closest tee. They explode on an obstactle they hit (wall or tee).";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "PLASMA TURRET: Shoots plasma bullets that work like FREEZE at the closest tee."; case ENTITY_OFFSET + ENTITY_PLASMAF:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_PLASMA: return "PLASMA TURRET: Shoots plasma bullets that work like FREEZE at the closest tee.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "PLASMA TURRET: Shoots plasma bullets that work like FREEZE at the closest tee. They also explode on an obstactly they hit (wall or tee)."; case ENTITY_OFFSET + ENTITY_PLASMA:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_PLASMAU: return "PLASMA TURRET: Shoots plasma bullets that work like FREEZE at the closest tee. They also explode on an obstactly they hit (wall or tee).";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "PLASMA TURRET: Shoots plasma bullets that work like UNFREEZE at the closest tee."; case ENTITY_OFFSET + ENTITY_PLASMAU:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_CRAZY_SHOTGUN_EX: return "PLASMA TURRET: Shoots plasma bullets that work like UNFREEZE at the closest tee.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "EXPLODING BULLET: Bounces off the walls with explosion. Touching the bullet works like FREEZE tile (freezes for 3 seconds by default)."; case ENTITY_OFFSET + ENTITY_CRAZY_SHOTGUN_EX:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_CRAZY_SHOTGUN: return "EXPLODING BULLET: Bounces off the walls with explosion. Touching the bullet works like FREEZE tile (freezes for 3 seconds by default).";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "EXPLODING BULLET: Bounces off the walls without explosion. Touching the bullet works like FREEZE tile (freezes for 3 seconds by default)."; case ENTITY_OFFSET + ENTITY_CRAZY_SHOTGUN:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_DRAGGER_WEAK: return "EXPLODING BULLET: Bounces off the walls without explosion. Touching the bullet works like FREEZE tile (freezes for 3 seconds by default).";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "DRAGGING LASER: Grabs and attracts the closest tee to it. Can't reach tees through walls and LASER BLOCKER. Weak."; case ENTITY_OFFSET + ENTITY_DRAGGER_WEAK:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_DRAGGER_NORMAL: return "DRAGGING LASER: Grabs and attracts the closest tee to it. Can't reach tees through walls and LASER BLOCKER. Weak.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "DRAGGING LASER: Grabs and attracts the closest tee to it. Can't reach tees through walls and LASER BLOCKER. Medium strength."; case ENTITY_OFFSET + ENTITY_DRAGGER_NORMAL:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_DRAGGER_STRONG: return "DRAGGING LASER: Grabs and attracts the closest tee to it. Can't reach tees through walls and LASER BLOCKER. Medium strength.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "DRAGGING LASER: Grabs and attracts the closest tee to it. Can't reach tees through walls and LASER BLOCKER. Strong."; case ENTITY_OFFSET + ENTITY_DRAGGER_STRONG:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_DRAGGER_WEAK_NW: return "DRAGGING LASER: Grabs and attracts the closest tee to it. Can't reach tees through walls and LASER BLOCKER. Strong.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "DRAGGING LASER: Grabs and attracts the closest tee to it. Can reach tees through walls but not through LASER BLOCKER. Weak."; case ENTITY_OFFSET + ENTITY_DRAGGER_WEAK_NW:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_DRAGGER_NORMAL_NW: return "DRAGGING LASER: Grabs and attracts the closest tee to it. Can reach tees through walls but not through LASER BLOCKER. Weak.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "DRAGGING LASER: Grabs and attracts the closest tee to it. Can reach tees through walls but not through LASER BLOCKER. Medium strength."; case ENTITY_OFFSET + ENTITY_DRAGGER_NORMAL_NW:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_DRAGGER_STRONG_NW: return "DRAGGING LASER: Grabs and attracts the closest tee to it. Can reach tees through walls but not through LASER BLOCKER. Medium strength.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "DRAGGING LASER: Grabs and attracts the closest tee to it. Can reach tees through walls but not through LASER BLOCKER. Strong."; case ENTITY_OFFSET + ENTITY_DRAGGER_STRONG_NW:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case ENTITY_OFFSET + ENTITY_DOOR: return "DRAGGING LASER: Grabs and attracts the closest tee to it. Can reach tees through walls but not through LASER BLOCKER. Strong.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH) break;
return "DOOR: Combined with LASER LENGTH creates doors. Doesn't allow to go through it (only with NINJA)."; case ENTITY_OFFSET + ENTITY_DOOR:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT || Layer == LAYER_SWITCH)
case TILE_TELE_GUN_ENABLE: return "DOOR: Combined with LASER LENGTH creates doors. Doesn't allow to go through it (only with NINJA).";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "TELEGUN: Turn gun on as telegun weapon."; case TILE_TELE_GUN_ENABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_TELE_GUN_DISABLE: return "TELEGUN: Turn gun on as telegun weapon.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "TELEGUN OFF: Turn gun off as telegun weapon."; case TILE_TELE_GUN_DISABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_ALLOW_TELE_GUN: return "TELEGUN OFF: Turn gun off as telegun weapon.";
if(Layer == LAYER_FRONT) break;
return "TELEGUN: Place on top of a collision tile, activates a spot to teleport to, cancels movement."; case TILE_ALLOW_TELE_GUN:
if(Layer == LAYER_SWITCH) if(Layer == LAYER_FRONT)
return "TELEGUN: Place on top of a collision tile, activates a spot to teleport to, cancels movement, for single weapons, using delay number to select which."; return "TELEGUN: Place on top of a collision tile, activates a spot to teleport to, cancels movement.";
break; if(Layer == LAYER_SWITCH)
case TILE_ALLOW_BLUE_TELE_GUN: return "TELEGUN: Place on top of a collision tile, activates a spot to teleport to, cancels movement, for single weapons, using delay number to select which.";
if(Layer == LAYER_FRONT) break;
return "TELEGUN: Place on top of a collision tile, activates a spot to teleport to, preserves movement."; case TILE_ALLOW_BLUE_TELE_GUN:
if(Layer == LAYER_SWITCH) if(Layer == LAYER_FRONT)
return "TELEGUN: Place on top of a collision tile, activates a spot to teleport to, preserves movement, for single weapons, using delay number to select which."; return "TELEGUN: Place on top of a collision tile, activates a spot to teleport to, preserves movement.";
break; if(Layer == LAYER_SWITCH)
case TILE_TELE_GRENADE_ENABLE: return "TELEGUN: Place on top of a collision tile, activates a spot to teleport to, preserves movement, for single weapons, using delay number to select which.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "TELEGRENADE: Turn grenade on as telegun weapon."; case TILE_TELE_GRENADE_ENABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_TELE_GRENADE_DISABLE: return "TELEGRENADE: Turn grenade on as telegun weapon.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "TELEGRENADE OFF: Turn grenade off as telegun weapon."; case TILE_TELE_GRENADE_DISABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_TELE_LASER_ENABLE: return "TELEGRENADE OFF: Turn grenade off as telegun weapon.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "TELELASER: Turn laser on as telegun weapon."; case TILE_TELE_LASER_ENABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
case TILE_TELE_LASER_DISABLE: return "TELELASER: Turn laser on as telegun weapon.";
if(Layer == LAYER_GAME || Layer == LAYER_FRONT) break;
return "TELELASER OFF: Turn laser off as telegun weapon."; case TILE_TELE_LASER_DISABLE:
break; if(Layer == LAYER_GAME || Layer == LAYER_FRONT)
return "TELELASER OFF: Turn laser off as telegun weapon.";
break;
}
if(Tile >= TILE_CHECKPOINT_FIRST && Tile <= TILE_CHECKPOINT_LAST && (Layer == LAYER_GAME || Layer == LAYER_FRONT))
return "TIME CHECKPOINT: Compares your current race time with your record to show you whether you are running faster or slower.";
return "";
}
else if(ExplanationID == EXPLANATION_FNG)
{
switch(Tile)
{
case TILE_FNG_AIR:
return "EMPTY: Can be used as an eraser.";
case TILE_FNG_HOOKABLE:
if(Layer == LAYER_GAME)
return "HOOKABLE: It's possible to hook and collide with it.";
break;
case TILE_FNG_DEATH:
if(Layer == LAYER_GAME)
return "DEATH: Kills the tee.";
break;
case TILE_FNG_UNHOOKABLE:
if(Layer == LAYER_GAME)
return "UNHOOKABLE: It's not possible to hook it, but can collide with it.";
break;
case TILE_FNG_SPIKE_GOLD:
if(Layer == LAYER_GAME)
return "GOLDEN SPIKE: Kills the tee and gives points to the killer. (Amount of points given is set inside the server)";
break;
case TILE_FNG_SPIKE_NORMAL:
if(Layer == LAYER_GAME)
return "NORMAL SPIKE: Kills the tee and gives points to the killer. (Amount of points given is set inside the server)";
break;
case TILE_FNG_SPIKE_RED:
if(Layer == LAYER_GAME)
return "RED SPIKE: Red team spikes. Gives negative points when killer is in blue team (Amount of points given is set inside the server)";
break;
case TILE_FNG_SPIKE_BLUE:
if(Layer == LAYER_GAME)
return "BLUE SPIKE: Blue team spikes. Gives negative points when killer is in red team (Amount of points given is set inside the server)";
break;
case TILE_FNG_SPIKE_GREEN:
if(Layer == LAYER_GAME)
return "GREEN SPIKE: Kills the tee and gives points to the killer. (Amount of points given is set inside the server)";
break;
case TILE_FNG_SPIKE_PURPLE:
if(Layer == LAYER_GAME)
return "PURPLE SPIKE: Kills the tee and gives points to the killer. (Amount of points given is set inside the server)";
break;
}
return "";
} }
if(Tile >= TILE_CHECKPOINT_FIRST && Tile <= TILE_CHECKPOINT_LAST && (Layer == LAYER_GAME || Layer == LAYER_FRONT))
return "TIME CHECKPOINT: Compares your current race time with your record to show you whether you are running faster or slower.";
return "";
} }