[Add-On]Gemz Game NPC

Page 1 of 2 12 LastLast
Results 1 to 15 of 27
  1. #1
    Account Upgraded | Title Enabled! Emilyx3 is offline
    MemberRank
    Apr 2009 Join Date
    393Posts

    [Add-On]Gemz Game NPC

    So I was bored again, and I decided to try something a little bit more complex:

    <Inspired by OMGPOP.com's Gemmers Game>
    Gemmers

    PHP Code:
    /**
     * Gems Game NPC
     * Author: Emilyx3 of UMaple
     */

    var Board;
    var 
    Score 0;
    var 
    GameType = -1BoardSize = -1NumCols = -1NumRows = -1,
    NumGemTypes = -1Difficulty = -1NextComboMultiplier 0,
    GameTime 180000 /*3 Minutes in Milliseconds*/GameStart = -1;
    var 
    GameTypes = [
    [
    "Normal""Play a regular game"],
    [
    "Time Attack""3 minutes to get as many points as possible"]
    //, ["Puzzle", "Solve puzzles"] // May add Puzzle mode later.
    ];
    var 
    BoardSizes = [
    //Board Size Name, Number of Rows, Number of Cols
    ["Small"65],
    [
    "Medium"76],
    [
    "Large"87],
    [
    "Huge"107]
    ];
    var 
    Difficulties = [
    //Difficulty Name, Number of Gem Types
    ["Very Easy"4],
    [
    "Easy"5],
    [
    "Medium"6],
    [
    "Hard"7]
    ];
    var 
    GameDropProbability 0.01 100;
    var 
    GameDrops = [
    //ItemID, Drop Probability (Should add Up to 1)
    [52000000.25],[52000010.20],[52000020.15],
    [
    40317010.05],[40010130.10],[23400000.25]
    ];
    var 
    Gems = [
    //Ore, Gem
    [40200004021000], [40200014021001], [40200024021002], [40200034021003],
    [
    40200044021004], [40200054021005], [40200064021006], [40200074021007],
    [
    40200084021008]
    ];
    var 
    Neighbors4 = [[0,1],[0,-1],[-1,0],[1,0]];
    var 
    Neighbors8 = [[-1, -1],[-10],[-11],[0, -1],[01],[1, -1],[10], [11]];
    var 
    status;

    function 
    Header() {
        return 
    "#b============#k #rG #gE #bM #dz #k#b============#k\r\n\r\n";
    }
    function 
    MenuScreen() {
        return 
    Header() +
        
    "Please pick an option:\r\n\r\n" +
        
    "#L0#Start Game#l\r\n" +
        
    "#L1#Game Instructions#l";
    }
    function 
    SendGameInstructions() {
        
    cm.sendNext(Header() +
            
    "#eGame Instructions:#n\r\n" +
            
    "1. Destroy Ores/Gems by clicking on blocks of 3 or more Ores/Gems to get points.\r\n" +
            
    "2. You get 5 points per Ore destroyed + 5% per Ore for combos higher than 3.\r\n" +
            
    "3. There is a chance that the Ore you click will turn into a Gem. These are" +
            
    "worth 30 points in a combo. You may also click on these to just get 20 points.\r\n" +
            
    "4. Special Items may appear. You can use these by just clicking on them:\r\n" +
            
    "            #v5021013# - Destroy surrounding 8 Ores/Gems (Does not affect special items).\r\n" +
            
    "            #v4031051# - Turns the surrounding 8 Ores into Gems.\r\n" +
            
    "            #v4031311# - Add 2 seconds to timer. (Only Time Attack mode)\r\n" +
            
    "            #v3990021##v3990023# - Red(Destroy all Ores/Gems Horizontally), Green(Turn all Ores into Gems Horizontally)\r\n" +
            
    "            #v3991008##v3991034# - Red(Destroy all Ores/Gems Vertically), Green(Turn all Ores into Gems Vertically)\r\n" +
            
    "            #v3990020# - Destory all Ores/Gems Vertically and Horizontally\r\n" +
            
    "      Destroyed Ores are worth 10 points each. Destroyed Gems are worth 25 points each. Special Items and Drop Items will not be destroyed.\r\n" +
            
    "5. Real In-Game Items may appear. Click on them to get them:\r\n" +
            
    "            #v5200000##v5200001##v5200002##v4031701##v4001013##v2340000#\r\n" +
            
    "\r\nGood Luck ~"
            
    );
    }
    function 
    SendGameTypeSelectionMenu() {
        var 
    SendStr Header();
        for (var 
    0;GameTypes.length;i++) {
            
    SendStr += "#L"+i+"#"+GameTypes[i][0]+" - "+GameTypes[i][1]+"#l\r\n";
        }
        
    cm.sendSimple(SendStr);
    }
    function 
    SendBoardSizeSelectionMenu() {
        var 
    SendStr Header();
        for (var 
    0;BoardSizes.length;i++) {
            
    SendStr += "#L"+i+"#"+BoardSizes[i][0]+" - "+BoardSizes[i][1]+"x"+BoardSizes[i][2]+"#l\r\n";
        }
        
    cm.sendSimple(SendStr);
    }
    function 
    SendDifficultySelectionMenu() {
        var 
    SendStr Header();
        for (var 
    0;Difficulties.length;i++) {
            
    SendStr += "#L"+i+"#"+Difficulties[i][0]+" - "+Difficulties[i][1]+" Gem Types#l\r\n";
        }
        
    cm.sendSimple(SendStr);
    }
    function 
    InitializeBoard() {
        
    NumRows BoardSizes[BoardSize][1];
        
    NumCols BoardSizes[BoardSize][2];
        
    Board = new Array(NumRows);
        for (var 
    0;Board.length;i++) {
            
    Board[i] = new Array(NumCols);
        }
    }
    function 
    InitializeGems() {
        
    NumGemTypes Difficulties[Difficulty][1];
        
    Shuffle(Gems);
        for (var 
    0;Board.length;r++) {
            for (var 
    0;Board[r].length;c++) {
                
    Board[r][c] = GetRandomOre();
            }
        }
    }
    function 
    GetRandomOre() {
        return 
    Gems[Math.floor(Math.random() * NumGemTypes)][0];
    }
    function 
    GetScoreString() {
        return 
    "#b#eGame Score:#n#k " AddCommas(Score.toFixed(2)) + "\r\n";
    }
    function 
    GetGameSettingsDescriptionString() {
        return 
    "#d#eGame Settings:#n#k " GameTypes[GameType][0]
        + 
    " - Board Size: " BoardSizes[BoardSize][0] + "("BoardSizes[BoardSize][1]+"x" BoardSizes[BoardSize][2]
        + 
    ") - Difficulty: " Difficulties[Difficulty][0] + "\r\n";
    }
    function 
    AddCommas(nStr) {
        
    nStr += '';
        
    nStr.split('.');
        
    x1 x[0];
        
    x2 x.length '.' x[1] : '';
        var 
    rgx = /(\d+)(\d{3})/;
        while (
    rgx.test(x1)) {
            
    x1 x1.replace(rgx'$1' ',' '$2');
        }
        return 
    x1 x2;
    }
    function 
    GetGameEndBoardString() {
        var 
    SendStr "";
        for (var 
    0;Board.length;r++) {
            for (var 
    0;Board[r].length;c++) {
                
    SendStr += "#v"+Board[r][c]+"#";
            }
            
    SendStr += "\r\n";
        }
        
    SendStr += "\r\n";
        return 
    SendStr;
    }
    function 
    GetBoardSelectionString() {
        var 
    SendStr "";
        var 
    Count 0;
        for (var 
    0;Board.length;r++) {
            for (var 
    0;Board[r].length;c++) {
                
    SendStr += "#L"+(Count++)+"##v"+Board[r][c]+"##l";
            }
            
    SendStr += "\r\n";
        }
        
    SendStr += "\r\n";
        return 
    SendStr;
    }
    function 
    ContainsGem(ComboGemGroup) {
        for (var 
    0;Combo.length;i++) {
            if (
    Board[Combo[i][0]][Combo[i][1]] == GemGroup[1]) {
                return 
    true;
            }
        }
        return 
    false;
    }
    function 
    DoMove(Move) {
        var 
    ItemID Board[Move[0]][Move[1]];
        var 
    GemGroup GetGemGroup(ItemID);
        var 
    Combo = new Array();
        var 
    IsSpecialItem false;
        
    Combo.push([Move[0],Move[1]]);
        if (
    GemGroup != null) {
            
    //Normal Gem
            
    GetNeighborGems(Move[0],Move[1],GemGroup,Combo);
            if (
    Combo.length 3) {
                if (!
    ContainsGem(ComboGemGroup)) {
                    return 
    false;
                }
            }
            
    AddScoreForCombination(ComboGemGroup);
        } else if (
    IsDropItem(ItemID)) {
            
    cm.gainItem(ItemID1);
        } else {
            
    //Special Item
            
    UseSpecialItem(ItemIDMove[0], Move[1], Combo);
            
    IsSpecialItem true;
        }
        
    RemoveAndGenerateNewGems(ComboMove[0], Move[1], GemGroupIsSpecialItem);
        return 
    true;
    }

    function 
    RemoveGemAndShiftDown(rc) {
        for (var 
    r;0;i--) {
            
    Board[i][c] = Board[i-1][c];
        }
        return [
    0c];
    }
    function 
    RemoveAndGenerateNewGems(ComborcGemGroupIsSpecialItem) {
        var 
    DropItemProb = (IsSpecialItem GameDropProbability + ((Combo.length 5) ? (GameDropProbability 10) * (Combo.length 5) : 0));
        var 
    SpecialItemProb = (IsSpecialItem 0.005 + (Combo.length 0.01 * (Combo.length 3) : 0.0) + DropItemProb);
        for (var 
    0;Combo.length;i++) {
            var 
    TurnToGemProb 0.20 + ((Combo.length 3) ? 0.2 * (Combo.length 3) : 0.0);
            if (
    Combo[i][0] == && Combo[i][1] == && GemGroup != null
                
    && GemGroup[0] == Board[r][c] && Math.random() < TurnToGemProb) {
                
    Board[r][c] = GemGroup[1];
            } else {
                var 
    NewGemLocation RemoveGemAndShiftDown(Combo[i][0],Combo[i][1]);
                for (var 
    1Combo.length;j++) {
                    if (
    Combo[j][1] == Combo[i][1] && Combo[j][0] < Combo[i][0]) {
                        
    Combo[j][0]++;
                    }
                }
                if (
    == Combo[i][1] && Combo[i][0]) {
                    
    r++;
                }
                var 
    Ret RandomOreGemDrop(NewGemLocation[0], NewGemLocation[1], DropItemProbSpecialItemProb);
                
    //Only allow 1 item drop and 1 Special Item drop per combo.
                
    if (Ret == 1) {
                    
    SpecialItemProb 0;
                } else if (
    Ret == 2) {
                    
    DropItemProb 0
                }
            }
        }
    }
    function 
    UseSpecialItem(ItemIDrcToBeRemoved) {
        
    Score += 10;
        var 
    Targets = new Array();
        switch (
    ItemID) {
            case 
    5021013:
            case 
    4031051:
                for (var 
    0;Neighbors8.length;i++) {
                    var 
    NewR Neighbors8[i][0];
                    var 
    NewC Neighbors8[i][1];
                    
    Targets.push([NewRNewC]);
                }
                break;
            case 
    3990021:
            case 
    3990023:
                for (
    0;Board[r].length;i++) {
                    if (
    != c) {
                        
    Targets.push([ri]);
                    }
                }
                break;
            case 
    3991008:
            case 
    3991034:
                for (
    0;Board.length;i++) {
                    if (
    != r) {
                        
    Targets.push([ic]);
                    }
                }
                break;
            case 
    3990020:
                for (
    0;Board[r].length;i++) {
                    if (
    != c) {
                        
    Targets.push([ri]);
                    }
                }
                for (
    0;Board.length;i++) {
                    if (
    != r) {
                        
    Targets.push([ic]);
                    }
                }
                break;
        }
        if (
    ItemID == 4031311) {
            
    GameTime += 2000;
        }
        switch (
    ItemID) {
            case 
    4031051:
            case 
    3990023:
            case 
    3991034:
                for (
    0;Targets.length;i++) {
                    if (
    ValidPosition(Targets[i][0], Targets[i][1])) {
                        var 
    GemGroup GetGemGroup(Board[Targets[i][0]][Targets[i][1]]);
                        if (
    GemGroup != null) {
                            if (
    GemGroup[0] == Board[Targets[i][0]][Targets[i][1]]) {
                                
    Board[Targets[i][0]][Targets[i][1]] = GemGroup[1];
                            }
                        }
                    }
                }
                break;
            case 
    5021013:
            case 
    3990021:
            case 
    3991008:
            case 
    3990020:
                for (
    0;Targets.length;i++) {
                    if (
    ValidPosition(Targets[i][0], Targets[i][1])) {
                        
    GemGroup GetGemGroup(Board[Targets[i][0]][Targets[i][1]]);
                        if (
    GemGroup != null) {
                            if (
    GemGroup[0] == Board[Targets[i][0]][Targets[i][1]]) {
                                
    Score += 10;
                            } else if (
    GemGroup[1] == Board[Targets[i][0]][Targets[i][1]]) {
                                
    Score += 25;
                            }
                            
    ToBeRemoved.push([Targets[i][0], Targets[i][1]]);
                        }
                    }
                }
                break;
        }
    }
    function 
    IsDropItem(ItemID) {
        var 
    Len GameDrops.length;
        while (
    Len--) {
            if (
    GameDrops[Len][0] == ItemID) {
                return 
    true;
            }
        }
        return 
    false;
    }

    function 
    IsOreOrGem(ItemID) {
        for (var 
    0;Gems.length;i++) {
            for (var 
    0;Gems[i].length;i++) {
                if (
    Gems[i][j] == ItemID)
                    return 
    true;
            }
        }
        return 
    false;
    }

    function 
    GetDropItem() {
        var 
    Math.random();
        var 
    tot 0;
        for (var 
    0;GameDrops.length;i++) {
            
    tot += GameDrops[i][1];
            if (
    tot) {
                return 
    GameDrops[i][0];
            }
        }
        return 
    5200000//Just in case.
    }
    function 
    RandomOreGemDrop(rcDropItemProbSpecialItemProb) {
        var 
    Math.random();
        if (
    DropItemProb) {
            
    //Generate a Drop
            
    Board[r][c] = GetDropItem();
            return 
    2;
        } else if (
    SpecialItemProb) {
            
    //Generate Special Item
            
    Board[r][c] = GetRandomSpecialItem();
            return 
    1;
        } else {
            
    //Normal Ore
            
    Board[r][c] = GetRandomOre();
            return 
    0;
        }
    }

    /*
    #v5021013# - Destroy surrounding 8 Ores/Gems (Does not affect special items). (25 points / destroyed item)\r\n" +
    #v4031051# - Turns the surrounding 8 Ores into Gems.\r\n" +
    #v4031311# - Add 2 seconds to timer. (Only Time Attack mode)\r\n" +
    #v3990021##v3990023# - Red(Destroy all Ores/Gems Horizontally - 25 points / destroyed item), Green(Turn all Ores into Gems Horizontally)\r\n" +
    #v3991008##v3991034# - Red(Destroy all Ores/Gems Vertically - 25 points / destroyed item), Green(Turn all Ores into Gems Vertically)\r\n" +
    #v3990020# - Destory all Ores/Gems Vertically and Horizontally (25 points / destroyed item)\r\n" +
     */
    function GetRandomSpecialItem() {
        var 
    Prob Math.random();
        if (
    GameType == && Math.random() < 0.25) {
            return 
    4031311;
        }
        if (
    Prob 0.10) {
            return 
    3990020;
        } else if (
    Prob 0.25) {
            return 
    3991008;
        } else if (
    Prob 0.35) {
            return 
    3991034;
        } else if (
    Prob 0.50) {
            return 
    3990021;
        } else if (
    Prob 0.60) {
            return 
    3990023;
        } else if (
    Prob 0.70) {
            return 
    4031051;
        } else {
            return 
    5021013;
        }
    }
    function 
    AddScoreForCombination(ComboGemGroup) {
        var 
    Multiplier 1.0 + (Combo.length 0.05 * (Combo.length 3))
        + 
    NextComboMultiplier;
        if (
    Combo.length == 3) {
            
    NextComboMultiplier 0;
        } else if (
    Combo.length == 4) {
            
    NextComboMultiplier += 0.01;
        } else if (
    Combo.length == 5) {
            
    NextComboMultiplier += 0.015;
        } else if (
    Combo.length 5) {
            
    NextComboMultiplier += 0.02;
        }
        var 
    Points 0;
        for (var 
    0;Combo.length;i++) {
            var 
    ItemID Board[Combo[i][0]][Combo[i][1]];
            if (
    GemGroup[0] == ItemID) {
                
    Points += 5;
            } else if (
    GemGroup[1] == ItemID) {
                if (
    Combo.length >= 3) {
                    
    Points += 30;
                } else {
                    
    Points += 20;
                }
            }
        }
        
    Score += (Points Multiplier);
    }
    function 
    NoMoreMoves() {
        for (var 
    0;Board.length;i++) {
            for (var 
    0;Board[i].length;j++) {
                var 
    GemGroup GetGemGroup(Board[i][j]);
                if (
    GemGroup == null) { //Special Item
                    
    return false;
                } else {
                    var 
    GetCount = new Array();
                    
    GetCount.push([i,j]);
                    
    GetNeighborGems(ijGemGroupGetCount);
                    if (
    GetCount.length 2) {
                        return 
    false;
                    }
                }
            }
        }
        return 
    true;
    }
    function 
    GetNeighborGems(rcGemGroupToBeRemoved) {
        var 
    CheckNeighbors = new Array();
        for (var 
    0;Neighbors4.length;i++) {
            var 
    NewR Neighbors4[i][0];
            var 
    NewC Neighbors4[i][1]
            if (
    ValidPosition(NewRNewC) && Contains(Board[NewR][NewC], GemGroup)) {
                if (
    PushIfNotPresent([NewRNewC], ToBeRemoved)) {
                    
    CheckNeighbors.push([NewRNewC]);
                }
            }
        }
        for (
    0;CheckNeighbors.length;i++) {
            
    GetNeighborGems(CheckNeighbors[i][0], CheckNeighbors[i][1], GemGroupToBeRemoved);
        }
    }
    function 
    ValidPosition(rc) {
        return 
    >= && NumRows && >= && NumCols;
    }
    function 
    Contains(ItemIDGemGroup) {
        var 
    GemGroup.length;
        while (
    i--) {
            if (
    GemGroup[i] == ItemID) {
                return 
    true;
            }
        }
        return 
    false;
    }
    function 
    PushIfNotPresent(MoveCombo) {
        var 
    Combo.length;
        while (
    i--) {
            var 
    Comp Combo[i];
            if (
    Comp[0] == Move[0] && Comp[1] == Move[1]) {
                return 
    false;
            }
        }
        
    Combo.push(Move);
        return 
    true;
    }
    function 
    GetPositionFromSelection(sel) {
        return [(
    sel NumCols) | 0, (sel NumCols) | 0];
    }
    function 
    GetGemGroup(ItemID) {
        for (var 
    0Gems.length;i++) {
            for (var 
    0;Gems[i].length;j++) {
                if (
    Gems[i][j] == ItemID) {
                    return 
    Gems[i];
                }
            }
        }
        return 
    null;
    }
    function 
    Shuffle(arr) {
        var 
    arr.length;
        if (
    == 0)
            return;
        while (--
    i) {
            var 
    Math.floorMath.random() * ( ) );
            var 
    tempi arr[i];
            var 
    tempj arr[j];
            
    arr[i] = tempj;
            
    arr[j] = tempi;
        }
    }
    function 
    GetTimeLeftString() {
        var 
    Ret "Time Left: ";
        var 
    Now = (new Date()).getTime();
        var 
    Diff GameTime GameStart Now;
        var 
    MilliSec = (Diff 1000) | 0;
        
    Diff /= 1000;
        var 
    Min = (Diff 60) | 0;
        var 
    Sec = (Diff 60) | 0;
        
    Ret += ((Min 10) ? "0" Min Min) + ":" + ((Sec 10) ? "0" Sec Sec)
        + 
    "." + ((MilliSec 100) ? "0" + ((MilliSec 10) ? "0" MilliSec MilliSec) : MilliSec);
        
    Ret += " seconds\r\n";
        return 
    Ret;
    }
    function 
    GetGameTime(End) {
        var 
    Diff End GameStart;
        var 
    MilliSec = (Diff 1000) | 0;
        
    Diff /= 1000;
        var 
    Min = (Diff 60) | 0;
        var 
    Sec = (Diff 60) | 0;
        return ((
    Min 10) ? "0" Min Min) + ":" + ((Sec 10) ? "0" Sec Sec)
        + 
    "." + ((MilliSec 100) ? "0" + ((MilliSec 10) ? "0" MilliSec MilliSec) : MilliSec);

    }
    function 
    start() {
        
    status = -1;
        
    action(100);
    }
    function 
    CheckSelection(slowhigh) {
        return 
    low && high;
    }
    function 
    action(modetypeselection) {
        if (
    mode == -|| mode == 0)
            
    cm.dispose();
        else {

            if (
    mode == 1) {
                if (
    status != 6) {
                    
    status++;
                }
            } else {
                
    status--;
            }

            if (
    status == 0) {
                
    cm.sendSimple(MenuScreen());
            } else if (
    status == 1) {
                if (
    selection == 0) {
                    
    action(100); //Move to Next
                
    } else if (selection == 1) {
                    
    SendGameInstructions();
                } else { 
    //Packet Edits
                    
    cm.dispose();
                }
            } else if (
    status == 2) {
                
    //Choose Game Type
                
    SendGameTypeSelectionMenu();
            } else if (
    status == 3) {
                if (
    CheckSelection(selection0GameTypes.length 1)) {
                    
    cm.dispose();
                    return;
                }
                
    GameType selection;
                
    //Choose Board Size
                
    SendBoardSizeSelectionMenu();
            } else if (
    status == 4) {
                if (
    CheckSelection(selection0BoardSizes.length 1)) {
                    
    cm.dispose();
                    return;
                }
                
    BoardSize selection;
                
    //Choose Difficulty
                
    SendDifficultySelectionMenu();
            } else if (
    status == 5) {
                if (
    CheckSelection(selection0Difficulties.length 1)) {
                    
    cm.dispose();
                    return;
                }
                
    Difficulty selection;
                
    InitializeBoard();
                
    InitializeGems();
                
    //No Header while in game, it's just annoying
                
    cm.sendSimple(GetScoreString() + GetBoardSelectionString() + GetGameSettingsDescriptionString());
            } else if (
    status == 6) {
                if (
    CheckSelection(selection0NumCols NumRows 1)) {
                    
    cm.dispose();
                    return;
                }
                if (
    GameStart == -1) {
                    
    GameStart = (new Date()).getTime();
                }
                if (
    GameType == && GameStart GameTime < (new Date()).getTime()) {
                    
    //Time Over
                    
    status++;
                    
    action(100);
                    return;
                }
                var 
    Move GetPositionFromSelection(selection);
                var 
    ValidMove DoMove(Move);
                if (
    NoMoreMoves()) {
                    
    status++;
                    
    action(100);
                } else {
                    
    cm.sendSimple(
                        (
    ValidMove "" "Invalid Move. You must click a group of 3 or more Ores/Gems.\r\n")
                        + 
    GetScoreString()+ (GameType == GetTimeLeftString() : "")
                        + 
    GetBoardSelectionString() + GetGameSettingsDescriptionString());
                }
            } else if (
    status == 8) {
                var 
    SendStr Header();
                
    SendStr += "#e#rGame Over#k#n\r\n";
                
    SendStr += GetScoreString();
                
    SendStr += GetGameSettingsDescriptionString();
                
    SendStr += "Game Time: " GetGameTime((new Date()).getTime()) + "\r\n";
                
    SendStr += GetGameEndBoardString();
                
    cm.sendOk(SendStr);
            } else {
                
    cm.dispose();
            }
        }

    Enjoy ~ (May be buggy, but it has passed light testing)
    P.S. Pics to be added later ...
    P.P.S. I couldn't find the "[Addon]" Tag anywhere...

    Edit 1: Added Pics and Boosted SpecialItem/Drop chances
    Edit 2: Some more rebalancing:
    -> Reduced Drop/Special Item chances (Still high enough to be interesting though).
    -> You can only get 1 Special Item and 1 Drop Item per click.
    -> You can now collect groups of 1 or 2 Gems/Ores if there is a Gem in the group, these groups are worth less however.
    -> Rebalanced point scoring.
    BugFix:
    -> Using a special item will not give you absurd chances of getting more special items (In fact, it won't give you any special/drop items at all).
    Attached Thumbnails Attached Thumbnails gemz1.jpg   gemz.jpg   gemz3.jpg   gemz4.jpg   gemz5.jpg  

    Last edited by Emilyx3; 29-04-11 at 04:50 AM.


  2. #2
    :) iJFAC is offline
    MemberRank
    Sep 2007 Join Date
    SomewhereLocation
    519Posts

    Re: Gemz Game NPC

    What about the screenshot? :o

    Besides that, cool idea and seems fun :D thanks for the release.. Liked ;)

  3. #3
    Account Upgraded | Title Enabled! Sharky is offline
    MemberRank
    Dec 2010 Join Date
    Ur Mom's Pants.Location
    927Posts

    Re: Gemz Game NPC

    Again, incredible. You really set my evaluation of my NPC scripting back to where it should be in both of your releases. It's motivating to see things like this.
    How long did this take you?

  4. #4
    Account Upgraded | Title Enabled! JakeK is offline
    MemberRank
    Sep 2010 Join Date
    Top of you.Location
    196Posts

    Re: Gemz Game NPC

    Damm thts another one nice NPC

  5. #5
    Gamma Sparrow is offline
    MemberRank
    Mar 2009 Join Date
    SydneyLocation
    2,960Posts

    Re: Gemz Game NPC

    How long did this take to make, Emily?

    Wish I could test, but I'm at school.

  6. #6
    Account Upgraded | Title Enabled! Emilyx3 is offline
    MemberRank
    Apr 2009 Join Date
    393Posts

    Re: Gemz Game NPC

    Quote Originally Posted by Sparrow View Post
    How long did this take to make, Emily?

    Wish I could test, but I'm at school.
    About an hour to plan out the game details and implementation.
    2 hours to actually type up the code.

  7. #7
    Enthusiast Version3 is offline
    MemberRank
    Apr 2011 Join Date
    SaturnLocation
    26Posts

    Re: Gemz Game NPC

    Wow, This is interesting.
    Hope i can test this soon.

  8. #8
    Gamma Sparrow is offline
    MemberRank
    Mar 2009 Join Date
    SydneyLocation
    2,960Posts

    Re: Gemz Game NPC

    Quote Originally Posted by Emilyx3 View Post
    About an hour to plan out the game details and implementation.
    2 hours to actually type up the code.
    Wow, great work.

  9. #9
    Apprentice xPerpetual is offline
    MemberRank
    Mar 2011 Join Date
    17Posts

    Re: Gemz Game NPC

    Yet another unbelievably creative NPC, great work!

  10. #10
    bleh.... Shawn is offline
    MemberRank
    Oct 2008 Join Date
    Mississauga, CaLocation
    5,904Posts

    Re: Gemz Game NPC

    Quote Originally Posted by Emilyx3 View Post

    P.P.S. I couldn't find the "[Addon]" Tag anywhere...
    It has to be manually typed. We've tried to see if prefixes could be made for the section, but from what I gathered, it would have to apply to all sections since you can't make one for a single section :(

    Anyways, great job again. I look forward to the pictures :)

  11. #11
    Account Upgraded | Title Enabled! Emilyx3 is offline
    MemberRank
    Apr 2009 Join Date
    393Posts

    Re: [Add-On]Gemz Game NPC

    Edit 1: Added Pics and Boosted SpecialItem/Drop chances

  12. #12
    may web.very maple.pls. iAkira is offline
    MemberRank
    Aug 2009 Join Date
    somewhere..Location
    2,378Posts

    Re: [Add-On]Gemz Game NPC

    Nice Emily, your professional at NPC scripting :]

  13. #13
    Account Upgraded | Title Enabled! Spiderman is offline
    MemberRank
    Feb 2010 Join Date
    417Posts

    Re: [Add-On]Gemz Game NPC

    One word, holy shit.

  14. #14
    Alpha Member XxОsirisxX is offline
    MemberRank
    Aug 2009 Join Date
    2,727Posts

    Re: [Add-On]Gemz Game NPC

    Well done, I haven't read the code, and probably will be useless to give any tip anyhow, you're really good at this, once again, I'm impressed by this work. I really like how you're reviving those "old school" computer games into NPC's.

    What would be next? Chess NPC or Solitaire NPC?

  15. #15
    Infraction Banned GiantPie is offline
    MemberRank
    Feb 2011 Join Date
    20Posts

    Re: [Add-On]Gemz Game NPC

    Holy shit this is intense



Page 1 of 2 12 LastLast

Advertisement