Esempio n. 1
0
        /// <summary>
        /// Try to klimb the given tile - typically called after you select a direction
        /// </summary>
        /// <param name="xy"></param>
        /// <param name="klimbResult"></param>
        /// <returns></returns>
        public string TryToKlimbInDirection(Point2D xy, out KlimbResult klimbResult)
        {
            TileReference tileReference = State.TheVirtualMap.GetTileReference(xy);
            string        retStr;

            if (State.TheVirtualMap.IsLargeMap)
            {
                // is it even klimbable?
                if (tileReference.IsKlimable)
                {
                    if (tileReference.Index != SpriteTileReferences.GetTileNumberByName("SmallMountains"))
                    {
                        throw new Ultima5ReduxException(
                                  "I am not personal aware of what on earth you would be klimbing that is not already stated in the following logic...");
                    }

                    State.GrapplingFall();
                    klimbResult = KlimbResult.SuccessFell;
                    retStr      = DataOvlRef.StringReferences.GetString(DataOvlReference.KlimbingStrings.FELL);
                }
                // is it tall mountains? we can't klimb those
                else if (tileReference.Index == SpriteTileReferences.GetTileNumberByName("TallMountains"))
                {
                    klimbResult = KlimbResult.CantKlimb;
                    retStr      = DataOvlRef.StringReferences.GetString(DataOvlReference.KlimbingStrings.IMPASSABLE);
                }
                // there is no chance of klimbing the thing
                else
                {
                    klimbResult = KlimbResult.CantKlimb;
                    retStr      = DataOvlRef.StringReferences.GetString(DataOvlReference.KlimbingStrings.NOT_CLIMABLE);
                }
            }
            else // it's a small map
            {
                if (tileReference.IsKlimable)
                {
                    // ie. a fence
                    klimbResult = KlimbResult.Success;
                    retStr      = string.Empty;
                }
                else
                {
                    klimbResult = KlimbResult.CantKlimb;
                    retStr      = DataOvlRef.StringReferences.GetString(DataOvlReference.TravelStrings.WHAT);
                }
            }
            PassTime();
            return(retStr);
        }
Esempio n. 2
0
        /// <summary>
        /// Try to klimb the given tile - typically called after you select a direction
        /// </summary>
        /// <param name="xy"></param>
        /// <param name="klimbResult"></param>
        /// <returns></returns>
        public string TryToKlimb(Point2D xy, out KlimbResult klimbResult)
        {
            //Point2D klimbTilePos = GetAdustedPos(CurrentVirtualMap.CurrentPosition, keyCode);
            TileReference tileReference = State.TheVirtualMap.GetTileReference(xy);

            if (State.TheVirtualMap.IsLargeMap)
            {
                // is it even klimable?
                if (tileReference.IsKlimable)
                {
                    if (tileReference.Index == SpriteTileReferences.GetTileNumberByName("SmallMountains"))
                    {
                        State.GrapplingFall();
                        klimbResult = KlimbResult.SuccessFell;
                        return(DataOvlRef.StringReferences.GetString(DataOvlReference.KLIMBING_STRINGS.FELL));
                    }
                    throw new Exception("I am not personnaly aware of what on earth you would be klimbing that is not already stated in the following logic...");
                }
                // is it tall mountains? we can't klimb those
                else if (tileReference.Index == SpriteTileReferences.GetTileNumberByName("TallMountains"))
                {
                    klimbResult = KlimbResult.CantKlimb;
                    return(DataOvlRef.StringReferences.GetString(DataOvlReference.KLIMBING_STRINGS.IMPASSABLE));
                }
                // there is no chance of klimbing the thing
                else
                {
                    klimbResult = KlimbResult.CantKlimb;
                    return(DataOvlRef.StringReferences.GetString(DataOvlReference.KLIMBING_STRINGS.NOT_CLIMABLE));
                }
            }
            else // it's a small map
            {
                if (tileReference.IsKlimable)
                {
                    // ie. a fence
                    klimbResult = KlimbResult.Success;
                    return(String.Empty);
                }
                else
                {
                    klimbResult = KlimbResult.CantKlimb;
                    return(DataOvlRef.StringReferences.GetString(DataOvlReference.TRAVEL_STRINGS.WHAT));
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Climbs the ladder on the current tile that the Avatar occupies
        /// </summary>
        public string TryToKlimb(out KlimbResult klimbResult)
        {
            string getKlimbOutput(string output = "")
            {
                if (output == "")
                {
                    return(DataOvlRef.StringReferences.GetString(DataOvlReference.TravelStrings.KLIMB));
                }
                return(DataOvlRef.StringReferences.GetString(DataOvlReference.TravelStrings.KLIMB) + output);
            }

            TileReference curTileRef = State.TheVirtualMap.GetTileReferenceOnCurrentTile();

            // if it's a large map, we either klimb with the grapple or don't klimb at all
            if (State.TheVirtualMap.IsLargeMap)
            {
                if (State.HasGrapple) // we don't have a grapple, so we can't klimb
                {
                    klimbResult = KlimbResult.RequiresDirection;
                    return(getKlimbOutput());
                }
                klimbResult = KlimbResult.CantKlimb;
                return(getKlimbOutput(DataOvlRef.StringReferences.GetString(DataOvlReference.KlimbingStrings.WITH_WHAT)));
            }

            // we can't klimb on the current tile, so we need to pick a direction
            if (!SpriteTileReferences.IsLadder(curTileRef.Index) && !SpriteTileReferences.IsGrate(curTileRef.Index))
            {
                klimbResult = KlimbResult.RequiresDirection;
                return(getKlimbOutput());
            }

            SmallMapReferences.SingleMapReference.Location location = State.TheVirtualMap.CurrentSingleMapReference.MapLocation;
            int  nCurrentFloor = State.TheVirtualMap.CurrentSingleMapReference.Floor;
            bool hasBasement   = State.TheVirtualMap.SmallMapRefs.HasBasement(location);
            int  nTotalFloors  = State.TheVirtualMap.SmallMapRefs.GetNumberOfFloors(location);
            int  nTopFloor     = hasBasement ? nTotalFloors - 1 : nTotalFloors;

            TileReference tileReference = State.TheVirtualMap.GetTileReference(State.TheVirtualMap.CurrentPosition);

            if (SpriteTileReferences.IsLadderDown(tileReference.Index) || SpriteTileReferences.IsGrate(tileReference.Index))
            {
                if ((hasBasement && nCurrentFloor >= 0) || nCurrentFloor > 0)
                {
                    State.TheVirtualMap.LoadSmallMap(SmallMapRef.GetSingleMapByLocation(location, nCurrentFloor - 1), State.CharacterRecords, false);
                    klimbResult = KlimbResult.Success;
                    return(getKlimbOutput(DataOvlRef.StringReferences.GetString(DataOvlReference.TravelStrings.DOWN)));
                }
            }
            else if (SpriteTileReferences.IsLadderUp(tileReference.Index))
            {
                if (nCurrentFloor + 1 < nTopFloor)
                {
                    State.TheVirtualMap.LoadSmallMap(SmallMapRef.GetSingleMapByLocation(location, nCurrentFloor + 1), State.CharacterRecords, false);
                    klimbResult = KlimbResult.Success;
                    return(getKlimbOutput(DataOvlRef.StringReferences.GetString(DataOvlReference.TravelStrings.UP)));
                }
            }

            klimbResult = KlimbResult.RequiresDirection;
            return(getKlimbOutput());
        }