function [xnew, ynew] = MakeStep(ScriptVar, frame_i, x, y, OldArray, particle_index)
    % Make step for one particle in the sensing scenario 
    % Outputs new set of coordinates for a particle in a given frame
    % Output - 
    %    [xnew ynew] - new set of x and y coordinates for the particle
    %
    % Inputs - 
    %    ScriptVar - Parameters container map
    %    OldArray - Element of AllCoordsCell for the old frame
    
    SensingStrength = ScriptVar('SensingStrength');
    xyHoneyRatio = ScriptVar('xyHoneyRatio');
    N_FramesRegion = ScriptVar('N_FramesRegion');
    if N_FramesRegion > 0 % If there are viscous zones
        xyHoney = ScriptVar('xyHoney');
        nn = transpose(NumberOfNeighbours(ScriptVar,x,y,OldArray, particle_index));
        ParticleType = ParticleTypeCalculator(ScriptVar, particle_index);
        NeighbourContribution = SensingStrength(ParticleType, :)*nn;
        % Matrix multiplication of:
        % i) row vector of sensing strengths for given particle type
        % against diff particle types
        % and,
        % ii) column vector of neighbours of each particle type
        if IsParticleInsideFigure(x,y,xyHoney) % If particle within viscous zone
            StepLimWithin_xyHoney = xyHoneyRatio*StepLimBasal(ScriptVar, x, y, particle_index);
            S_Effective = StepLimWithin_xyHoney*exp(-1*NeighbourContribution);
            % So S_Eff includes explicit viscous zone contribution, contribution
            % of sensing and basal contribution
        else
            S_Effective = StepLimBasal(ScriptVar, x, y, particle_index)*exp(-1*NeighbourContribution);
            % If particle is not in the viscous zone, the effective
            % StepLim = basal StepLim * sensing effects
        end
    else % If viscous zones don't exist
        nn = transpose(NumberOfNeighbours(ScriptVar,x,y,OldArray, particle_index));
        ParticleType = ParticleTypeCalculator(ScriptVar, particle_index);
        NeighbourContribution = SensingStrength(ParticleType, :)*nn;
        S_Effective = StepLimBasal(ScriptVar, x, y, particle_index)*exp(-1*NeighbourContribution);
    end
    % Sample from uniform distribution [-S_Effective S_Effective]
    r = -S_Effective + 2*S_Effective.*rand(1,2);
    FlowContribution = 0;
    x_try = x + r(1) + FlowContribution;
    y_try = y + r(2);
    
    % StayWithinBounds checks and corrects particle positions lying outside
    % the box bounds
    [xnew, ynew] = StayWithinBounds(ScriptVar, frame_i, x_try, y_try, particle_index);
end