/// @addtogroup sefun
/// @{
/// @file room
/// @brief room related simul_efuns
/// @author Gwenhwyvar
/// @version 0.1.0
/// @date 2016-01-26

// --------------------------------------------------------------------------
/// @brief opposite_dir
///
/// returns the oposite to the questioned direction
/// @Param str
/// @Param article
/// @Returns 
// --------------------------------------------------------------------------
public string opposite_dir(string str, int article = 0)
{
    int classic = 0;

    switch(str)
    {
        // standard compass directions
        case "north":       ret = "south";    classic = 1;     break;
        case "northeast":   ret = "southwest";classic = 1;     break;
        case "east":        ret = "west";     classic = 1;     break;
        case "southeast":   ret = "northwest";classic = 1;     break;
        case "south":       ret = "north";    classic = 1;     break;
        case "southwest":   ret = "northeast";classic = 1;     break;
        case "west":        ret = "east";     classic = 1;     break;
        case "northwest":   ret = "southeast";classic = 1;     break;

        // additional 'standard' directions
        case "up":          ret = (article ? "below" : "down");break;
        case "down":        ret = (article ? "above" : "up");  break;
        case "enter":       ret = "leave";                     break;
        case "leave":       ret = "enter";                     break;

        // for ships
        case "fore":        ret = "aft";                       break;
        case "aft":         ret = "fore";                      break;
        case "port":        ret = "starboard";                 break;
        case "starboard":   ret = "port";                      break;

        // world map related
        case "+y":          ret = "-y";                        break;
        case "-y":          ret = "+y";                        break;
        case "+x":          ret = "-x";                        break;
        case "-x":          ret = "+x";                        break;
        case "+z":          ret = "-z";                        break;
        case "-z":          ret = "+z";                        break;

        case "+x+y":        ret = "-x-y";                      break;
        case "-x-y":        ret = "+x+y";                      break;
        case "+x-y":        ret = "-x+y";                      break;
        case "-x+y":        ret = "+x-y";                      break;

        case "+x+z":        ret = "-x-z";                      break;
        case "-x-z":        ret = "+x+z";                      break;
        case "+x-z":        ret = "-x+z";                      break;
        case "-x+z":        ret = "+x-z";                      break;

        case "+y+z":        ret = "-y-z";                      break;
        case "-y-z":        ret = "+y+z";                      break;
        case "+y-z":        ret = "-y+z";                      break;
        case "-y+z":        ret = "+y-z";                      break;


        case "+x+y+z":      ret = "-x-y-z";                    break;
        case "+x+y-z":      ret = "-x-y+z";                    break;
        case "+x-y+z":      ret = "-x+y-z";                    break;
        case "+x-y-z":      ret = "-x+y+z";                    break;
        case "-x+y+z":      ret = "+x-y-z";                    break;
        case "-x+y-z":      ret = "+x-y+z";                    break;
        case "-x-y+z":      ret = "+x+y-z";                    break;
        case "-x-y-z":      ret = "+x+y+z";                    break;

        default:            ret = "";                          break;
    }
    if(article && classic)
        return "the "+ret;
    else
        return ret;
}
///  @}
