Changeset 4322 for 2012


Ignore:
Timestamp:
2013-06-28 12:39:51 (6 years ago)
Author:
saolhaka
Message:
 
Location:
2012/09-22/SanteriH/Kynari
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • 2012/09-22/SanteriH/Kynari/Kynari/Kynari/Kynari.cs

    r4282 r4322  
    118118 
    119119        DrawPerimeter = false; // ei haluta piirtää kentän reunoja 
     120        //IsFullScreen = true; 
    120121        LuoAlkuValikko(); 
    121122    } 
     
    157158        ruudut.SetTileMethod('w', LuoPortaali); 
    158159        ruudut.SetTileMethod('v', LuoNorsuVihu, "Pistooli"); 
     160        ruudut.SetTileMethod('a', LuoNorsuVihu, "Kivääri"); 
    159161        //ruudut.SetTileMethod('m', LuoAse, new Vector(24, 24), "Miekka", miekankuva); 
     162        ruudut.SetTileMethod('+', LuoPowerUp1, new Vector(16, 20), "Power Up", powerupinkuva); 
     163        ruudut.SetTileMethod('h', LuoHP1, new Vector(16, 20), "HP", hpkuva); 
     164        ruudut.SetTileMethod('P', LuoAse, new Vector(16, 11), "Pistooli", pistoolinkuva); 
    160165        ruudut.SetTileMethod('A', LuoAse, new Vector(39, 13), "Kivääri", kivaarinkuva); 
    161166        ruudut.SetTileMethod('G', LuoAse, new Vector(42, 15), "Kranaatinheitin", kranaatinheittimenkuva); 
     
    203208        Level.Background.CreateGradient(Color.White, Color.Gray); 
    204209        Gravity = new Vector(0, -1500); 
     210        Camera.ZoomToLevel(); 
    205211 
    206212        Timer timer = new Timer(); 
     
    358364        Add(kohde); 
    359365        AddCollisionHandler(kohde, "ammus", delegate (PhysicsObject o, PhysicsObject k) { TuhoaKohde(kohde); }); 
     366        AddCollisionHandler(kohde, "Kohde tuhottu", delegate(PhysicsObject o, PhysicsObject k) { TuhoaKohde(kohde); }); 
    360367    } 
    361368    void TuhoaKohde(PhysicsObject kohde) 
    362369    { 
     370        Explosion rajahdys = new Explosion(80); 
     371        rajahdys.UseShockWave = false; 
     372        rajahdys.Position = kohde.Position; 
     373        rajahdys.Tag = "Kohde rajahdys"; 
     374        Add(rajahdys); 
    363375        kohde.Destroy(); 
     376        kohde.Destroyed += delegate 
     377        { 
     378            List<GameObject> ketaLahella = GetObjects(x => x.Tag.ToString() == "Target" && Vector.Distance(x.Position, kohde.Position) < kohde.Width * 2); 
     379            ketaLahella.ForEach(x => TuhoaKohde(x as PhysicsObject)); 
     380        }; 
    364381    } 
    365382 
     
    369386        norsu.Image = norsu2; 
    370387        norsu.Tag = "Norsu"; 
    371  
     388        norsu.Position = paikka; 
    372389        norsu.HPLaskuri = new DoubleMeter(45, 0, 45); 
    373390        norsu.HPLaskuri.MaxValue = 45; 
     
    377394            NorsuKuoli(norsu); 
    378395        }; 
    379          
    380  
    381         PlatformWandererBrain aivot = new PlatformWandererBrain(); 
    382         norsu.Brain = aivot; 
    383         aivot.Speed = 200; 
    384         aivot.JumpSpeed = 700; 
    385          
     396 
     397        PlatformWandererBrain pBrain = new PlatformWandererBrain(); 
     398        pBrain.TriesToJump = true; 
     399        pBrain.FallsOffPlatforms = true; 
     400        pBrain.Speed = 200; 
     401        pBrain.JumpSpeed = 700; 
     402 
     403        FollowerBrain brain = new FollowerBrain( "pelaaja" ); 
     404        brain.DistanceFar = 600; 
     405        brain.DistanceClose = 200; 
     406        brain.StopWhenTargetClose = true; 
     407        brain.TargetClose += delegate { Ammu(norsu); }; 
     408        brain.FarBrain = pBrain; 
     409        brain.Speed = 400; 
     410        norsu.Brain = brain; 
     411 
    386412        Add(norsu); 
    387413        LuoAsePelaajalle(ase, norsu); 
     
    948974    Pelaaja LuoYksinPelaaja(Vector paikka, double leveys, double korkeus, Direction suunta, Pelaaja pelaaja) 
    949975    { 
    950         string ase = "Pistooli"; 
    951         if (pelaaja.Weapon != null && SailytaAse == "Kyllä") 
     976        string ase = null; 
     977        string ase2 = null; 
     978        if (pelaaja.Weapon != null && pelaaja.Weapon.Tag != null && taso != 0) 
    952979        { 
    953980            ase = pelaaja.Weapon.Tag.ToString(); 
     
    958985 
    959986        } 
     987        if (pelaaja.varaAse != null && taso != 0) 
     988        { 
     989            ase2 = pelaaja.varaAse; 
     990            if (ase2.Length > 6 && ase2.Substring(ase2.Length - 5) == "Lv. 4") 
     991            { 
     992                ase2 = ase2.Substring(0, ase2.Length - 5) + "Lv. 3"; 
     993            } 
     994 
     995        } 
     996 
    960997        pelaaja = new Pelaaja(40, 40, Shape.Circle); 
    961998        pelaaja.Image = norsu; 
     
    9691006        pelaaja.HPLaskuri.LowerLimit += delegate() 
    9701007        { 
    971             PelaajaKuoli(pelaaja); 
     1008            YksinPelaajaKuoli(pelaaja); 
    9721009        }; 
    9731010        Add(pelaaja); 
    9741011 
    9751012        LuoAsePelaajalle(ase, pelaaja); 
     1013        LuoVaraAse(ase2, pelaaja); 
    9761014        return pelaaja; 
    9771015    } 
     
    10121050        norsu.Destroy(); 
    10131051        PudotaAseenHahmo(norsu); 
     1052    } 
     1053 
     1054    void YksinPelaajaKuoli(Pelaaja pelaaja) 
     1055    { 
     1056        uusiYksinPeli(); 
    10141057    } 
    10151058 
     
    10811124    void keraaPowerUp(PhysicsObject powerup, Pelaaja pelaaja) 
    10821125    { 
     1126        if (pelaaja.Weapon == null || pelaaja.Weapon.Tag == null) return; 
    10831127        powerup.Destroy(); 
    10841128        powerupmaara -= 1; 
     
    11041148    void vaihdaAse(Pelaaja pelaaja) 
    11051149    { 
    1106         if (pelaaja.Weapon == null || pelaaja.Weapon.IsDestroyed) 
    1107         {  
    1108             return;  
     1150        if (pelaaja.Weapon == null || pelaaja.Weapon.IsDestroyed || pelaaja.Weapon.Tag == null) 
     1151        { 
     1152            if (pelaaja.varaAse != null) 
     1153            { 
     1154                pelaaja.Clear(); 
     1155                LuoAsePelaajalle(pelaaja.varaAse, pelaaja); 
     1156                naytaTiedot(); 
     1157                pelaaja.varaAse = null; 
     1158                saaAmpua = false; 
     1159                Timer.SingleShot(0.1, delegate 
     1160                { 
     1161                    saaAmpua = true; 
     1162                }); 
     1163                return; 
     1164            } 
     1165            else 
     1166            { 
     1167                return; 
     1168            } 
    11091169        } 
    11101170 
    11111171        string asetag = pelaaja.Weapon.Tag.ToString(); 
    1112         Image aseenKuva = pelaaja.Weapon.Image; 
    1113         Vector aseenkoko = pelaaja.Weapon.Size; 
     1172        //Image aseenKuva = pelaaja.Weapon.Image; 
     1173        //Vector aseenkoko = pelaaja.Weapon.Size; 
    11141174        if (asetag.Length > 6 && asetag.Substring(asetag.Length - 5) == "Lv. 4") 
    11151175        { 
     
    11191179        pelaaja.Clear(); 
    11201180        pelaaja.Weapon.Tag = null; 
    1121    
    1122         LuoAsePelaajalle(pelaaja.varaAse, pelaaja); 
     1181 
     1182        if (LuoAsePelaajalle(pelaaja.varaAse, pelaaja)) 
     1183        { 
     1184            string aseenTagi = pelaaja.Weapon.Tag.ToString(); 
     1185            if (aseenTagi != null && aseenTagi.Length > 6 && aseenTagi.Substring(aseenTagi.Length - 5) == "Lv. 4") 
     1186            { 
     1187                aseenTagi = aseenTagi.Substring(0, aseenTagi.Length - 5) + "Lv. 3"; 
     1188            } 
     1189        } 
     1190 
    11231191        naytaTiedot(); 
    1124          
    1125          
    1126         //string aseenTagi = pelaaja.Weapon.Tag.ToString(); 
    1127         //if (aseenTagi != null && aseenTagi.Length > 6 && aseenTagi.Substring(aseenTagi.Length - 5) == "Lv. 4") 
    1128         //{ 
    1129         //    aseenTagi = aseenTagi.Substring(0, aseenTagi.Length - 5) + "Lv. 3"; 
    1130         //} 
    1131  
     1192 
     1193        LuoVaraAse(asetag, pelaaja); 
     1194 
     1195        saaAmpua = false; 
     1196        Timer.SingleShot(0.1, delegate 
     1197        { 
     1198            saaAmpua = true; 
     1199        }); 
     1200 
     1201        /* 
    11321202        GameObject ase = new GameObject(0, 0); 
    11331203        ase.Image = aseenKuva; 
     
    11411211         
    11421212        pelaaja.Add(ase); 
     1213        */ 
     1214    } 
     1215 
     1216    void LuoVaraAse(string asetag, Image aseenKuva, Vector aseenkoko, Pelaaja pelaaja) 
     1217    { 
     1218        if (asetag == null || aseenKuva == null || aseenkoko == null) return; 
     1219 
     1220        GameObject ase = new GameObject(0, 0); 
     1221        ase.X = -20; 
     1222        ase.Y = 0; 
     1223        ase.Tag = asetag; 
     1224        ase.Image = aseenKuva; 
     1225        ase.Size = aseenkoko; 
     1226        ase.Angle = Angle.FromDegrees(90); 
     1227        pelaaja.varaAse = asetag; 
     1228 
     1229        pelaaja.Add(ase); 
     1230    } 
     1231 
     1232    void LuoVaraAse(string aseenTag, Pelaaja pelaaja) 
     1233    { 
     1234        if (aseenTag == null) return; 
     1235 
     1236        Image aseenKuva = pistoolinkuva; 
     1237        Vector aseenKoko = new Vector(0,0); 
     1238 
     1239        if (aseenTag == "Kivääri") 
     1240        { 
     1241            aseenKuva = kivaarinkuva; 
     1242            aseenKoko = new Vector(39, 13); 
     1243        } 
     1244        if (aseenTag == "Magnum") 
     1245        { 
     1246            aseenKuva = magnumkuva; 
     1247            aseenKoko = new Vector(17, 12); 
     1248        } 
     1249 
     1250        if (aseenTag == "Haulikko") 
     1251        { 
     1252            aseenKuva = haulikonkuva; 
     1253            aseenKoko = new Vector(42, 10); 
     1254        } 
     1255 
     1256        if (aseenTag == "Sniper") 
     1257        { 
     1258            aseenKuva = sniperinkuva; 
     1259            aseenKoko = new Vector(42, 11); 
     1260        } 
     1261 
     1262        if (aseenTag == "Kranaatinheitin") 
     1263        { 
     1264            aseenKuva = kranaatinheittimenkuva; 
     1265            aseenKoko = new Vector(42, 15); 
     1266        } 
     1267        if (aseenTag == "Raketinheitin") 
     1268        { 
     1269            aseenKuva = raketinheittimenkuva; 
     1270            aseenKoko = new Vector(48, 15); 
     1271        } 
     1272 
     1273        if (aseenTag == "Pistooli") 
     1274        { 
     1275            aseenKuva = pistoolinkuva; 
     1276            aseenKoko = new Vector(16, 11); 
     1277        } 
     1278 
     1279        if (aseenTag == "Kivääri Lv. 2") 
     1280        { 
     1281            aseenKuva = kivaarinkuva2; 
     1282            aseenKoko = new Vector(39, 16); 
     1283        } 
     1284        if (aseenTag == "Magnum Lv. 2") 
     1285        { 
     1286            aseenKuva = magnumkuva2; 
     1287            aseenKoko = new Vector(17, 12); 
     1288        } 
     1289 
     1290        if (aseenTag == "Haulikko Lv. 2") 
     1291        { 
     1292            aseenKuva = haulikonkuva2; 
     1293            aseenKoko = new Vector(42, 12); 
     1294        } 
     1295 
     1296        if (aseenTag == "Sniper Lv. 2") 
     1297        { 
     1298            aseenKuva = sniperinkuva2; 
     1299            aseenKoko = new Vector(42, 11); 
     1300        } 
     1301 
     1302        if (aseenTag == "Kranaatinheitin Lv. 2") 
     1303        { 
     1304            aseenKuva = kranaatinheittimenkuva2; 
     1305            aseenKoko = new Vector(42, 16); 
     1306        } 
     1307        if (aseenTag == "Raketinheitin Lv. 2") 
     1308        { 
     1309            aseenKuva = raketinheittimenkuva2; 
     1310            aseenKoko = new Vector(48, 15); 
     1311        } 
     1312 
     1313        if (aseenTag == "Pistooli Lv. 2") 
     1314        { 
     1315            aseenKuva = pistoolinkuva2; 
     1316            aseenKoko = new Vector(17, 11); 
     1317        } 
     1318        if (aseenTag == "Kivääri Lv. 3") 
     1319        { 
     1320            aseenKuva = kivaarinkuva3; 
     1321            aseenKoko = new Vector(39, 16); 
     1322        } 
     1323        if (aseenTag == "Magnum Lv. 3") 
     1324        { 
     1325            aseenKuva = magnumkuva3; 
     1326            aseenKoko = new Vector(17, 12); 
     1327        } 
     1328 
     1329        if (aseenTag == "Haulikko Lv. 3") 
     1330        { 
     1331            aseenKuva = haulikonkuva3; 
     1332            aseenKoko = new Vector(38, 12); 
     1333        } 
     1334 
     1335        if (aseenTag == "Sniper Lv. 3") 
     1336        { 
     1337            aseenKuva = sniperinkuva3; 
     1338            aseenKoko = new Vector(45, 12); 
     1339        } 
     1340 
     1341        if (aseenTag == "Kranaatinheitin Lv. 3") 
     1342        { 
     1343            aseenKuva = kranaatinheittimenkuva3; 
     1344            aseenKoko = new Vector(37, 17); 
     1345        } 
     1346        if (aseenTag == "Raketinheitin Lv. 3") 
     1347        { 
     1348            aseenKuva = raketinheittimenkuva3; 
     1349            aseenKoko = new Vector(48, 22.5); 
     1350        } 
     1351 
     1352        if (aseenTag == "Pistooli Lv. 3") 
     1353        { 
     1354            aseenKuva = pistoolinkuva3; 
     1355            aseenKoko = new Vector(20, 13); 
     1356        } 
     1357 
     1358 
     1359        if (aseenTag == "Kivääri Lv. 4") 
     1360        { 
     1361            aseenKuva = kivaarinkuva4; 
     1362            aseenKoko = new Vector(39, 16); 
     1363        } 
     1364        if (aseenTag == "Magnum Lv. 4") 
     1365        { 
     1366            aseenKuva = magnumkuva4; 
     1367            aseenKoko = new Vector(17, 12); 
     1368        } 
     1369 
     1370        if (aseenTag == "Haulikko Lv. 4") 
     1371        { 
     1372            aseenKuva = haulikonkuva4; 
     1373            aseenKoko = new Vector(38, 12); 
     1374        } 
     1375 
     1376        if (aseenTag == "Sniper Lv. 4") 
     1377        { 
     1378            aseenKuva = sniperinkuva4; 
     1379            aseenKoko = new Vector(45, 12); 
     1380        } 
     1381 
     1382        if (aseenTag == "Kranaatinheitin Lv. 4") 
     1383        { 
     1384            aseenKuva = kranaatinheittimenkuva4; 
     1385            aseenKoko = new Vector(37, 17); 
     1386        } 
     1387        if (aseenTag == "Raketinheitin Lv. 4") 
     1388        { 
     1389            aseenKuva = raketinheittimenkuva4; 
     1390            aseenKoko = new Vector(48, 22.5); 
     1391        } 
     1392 
     1393        if (aseenTag == "Pistooli Lv. 4") 
     1394        { 
     1395            aseenKuva = pistoolinkuva4; 
     1396            aseenKoko = new Vector(20, 13); 
     1397        } 
     1398 
     1399        //Yksinpeli aseet 
     1400        if (aseenTag == "Miekka") 
     1401        { 
     1402            aseenKuva = miekankuva; 
     1403            aseenKoko = new Vector(24, 24); 
     1404 
     1405        } 
     1406 
     1407        GameObject ase = new GameObject(0, 0); 
     1408        ase.Image = null; 
     1409        ase.X = -20; 
     1410        ase.Y = 0; 
     1411        ase.Tag = aseenTag; 
     1412        ase.Image = aseenKuva; 
     1413        ase.Size = aseenKoko; 
     1414        ase.Angle = Angle.FromDegrees(90); 
     1415        pelaaja.varaAse = aseenTag; 
     1416 
     1417        pelaaja.Add(ase); 
    11431418    } 
    11441419 
     
    11601435    private void PudotaAseenHahmo(Pelaaja pelaaja) 
    11611436    { 
    1162         if (pelaaja.Weapon == null) return; 
     1437        if (pelaaja.Weapon == null || pelaaja.Weapon.Tag == null) return; 
    11631438 
    11641439        pelaaja.voikoPoimiaAseen = false; 
     
    16751950    } 
    16761951 
     1952    void LuoPowerUp1(Vector paikka, double leveys, double korkeus, Vector koko, String tagi, Image kuva) 
     1953    { 
     1954        PhysicsObject powerup = new PhysicsObject(koko.X, koko.Y); 
     1955        powerup.Position = paikka; 
     1956        powerup.Tag = tagi; 
     1957        powerup.Image = kuva; 
     1958        Add(powerup); 
     1959        AddCollisionHandler<PhysicsObject, Pelaaja>(powerup, "pelaaja", keraaPowerUp); 
     1960    } 
     1961 
    16771962    void LisaaPowerUpPaikka(Vector paikka, double leveys, double korkeus, List<Vector> powerupvektorit) 
    16781963    { 
     
    16951980    } 
    16961981 
     1982    void LuoHP1(Vector paikka, double leveys, double korkeus, Vector koko, String tagi, Image kuva) 
     1983    { 
     1984        PhysicsObject hp = new PhysicsObject(koko.X, koko.Y); 
     1985        hp.Position = paikka; 
     1986        hp.Tag = tagi; 
     1987        hp.Image = kuva; 
     1988        Add(hp); 
     1989        AddCollisionHandler<PhysicsObject, Pelaaja>(hp, "pelaaja", keraaHP); 
     1990    } 
     1991 
    16971992    void LuoAse(Vector paikka, double leveys, double korkeus, Vector koko, String tagi, Image kuva) 
    16981993    { 
     
    17112006    /// <param name="pelaaja">Pelaaja jolle ase luodaan</param> 
    17122007    /// <returns></returns> 
    1713     private void LuoAsePelaajalle(string aseenTag, Pelaaja pelaaja) 
    1714     { 
    1715         if (aseenTag == null) return; 
     2008    private bool LuoAsePelaajalle(string aseenTag, Pelaaja pelaaja) 
     2009    { 
     2010        if (aseenTag == null) return false; 
    17162011 
    17172012        // Varsinainen ase 
     
    20422337             
    20432338        } 
    2044         if(ase != null) 
     2339        if (ase != null) 
     2340        { 
    20452341            pelaaja.Weapon = ase; 
     2342            return true; 
     2343        } 
     2344        return false; 
    20462345    } 
    20472346 
     
    23952694        pelaajaNro.Listen(Button.LeftTrigger, ButtonState.Pressed, LukitseSuunta, "Lukitse suunta", pelaaja); 
    23962695        pelaajaNro.Listen(Button.LeftTrigger, ButtonState.Released, PoistaLukitus, "Poista lukitus", pelaaja); 
     2696        pelaajaNro.Listen(Button.X, ButtonState.Pressed, vaihdaAse, "Vaihda ase", pelaaja); 
    23972697 
    23982698        pelaajaNro.Listen(Button.Start, ButtonState.Pressed, YksinPeliPauselle, "Pysäyttää pelin", pelaaja); 
     
    24972797    void Ammu(PlatformCharacter hahmo) 
    24982798    { 
    2499          if (hahmo.IsDestroyed || !saaAmpua || hahmo.Weapon.IsDestroyed == true) return; 
     2799        if (hahmo.IsDestroyed || !saaAmpua || hahmo.Weapon == null || hahmo.Weapon.Tag == null || hahmo.Weapon.IsDestroyed == true) return; 
    25002800        PhysicsObject ammus = hahmo.Weapon.Shoot(); 
    25012801        if (ammus == null) return; 
  • 2012/09-22/SanteriH/Kynari/Kynari/KynariContent/obj/x86/Debug/ContentPipeline.xml

    r4282 r4322  
    451451      <Options>None</Options> 
    452452      <Output>C:\MyTemp\SanteriH\Kynari\Kynari\Kynari\bin\x86\Debug\Content\taso1.xnb</Output> 
    453       <Time>2013-06-27T13:40:38.7015777+03:00</Time> 
     453      <Time>2013-06-28T12:30:44.1312611+03:00</Time> 
    454454    </Item> 
    455455    <Item> 
     
    460460      <Options>None</Options> 
    461461      <Output>C:\MyTemp\SanteriH\Kynari\Kynari\Kynari\bin\x86\Debug\Content\taso0.xnb</Output> 
    462       <Time>2013-06-27T12:40:31.3418778+03:00</Time> 
     462      <Time>2013-06-28T10:43:24.1553279+03:00</Time> 
    463463    </Item> 
    464464    <Item> 
  • 2012/09-22/SanteriH/Kynari/Kynari/KynariContent/taso0.txt

    r4282 r4322  
    22t                                           t                                t         t 
    33t                                           t                                t         t 
    4 t                                           t                                t         t 
    5 t     tttttttttttttttttttttt                t    ttttttttttttttttttttttttt   t         t 
    6 t                          tt               t                           .t   t         t 
    7 t                          t t              t                           .t   t         t 
    8 t                          t  t             ttttttttttttttttttttttt     tt   t         t 
    9 ttttttttttttttttttttt      t   t            .                           tt   t         t 
    10 t                          t    t           .                           tt   ttttttttttt 
     4t                                           t    ttttttttttttttttttttttt     t         t 
     5t                                           t                             ...t         t 
     6t     tttttttttttttttttttttt                t                            t   t         t 
     7t                          tt               tttttttttttttt               t   t         t 
     8t                          t t              t             t              t   t         t 
     9t                          t  t             tttttttttttttttt             t   t         t 
     10ttttttttttttttttttttt      t   t            .                            t   t         t 
     11t                          t    t           .                            t   ttttttttttt 
    1112t                          t     t          tttttttttttttttttttttttttttttt            wt 
    12 t 1                        t      t        t                             t            #t 
     13t 1                        t      t    P   t                             t            #t 
    1314z#########################################################tttttttttttttttttttttttttttttt 
  • 2012/09-22/SanteriH/Kynari/Kynari/KynariContent/taso1.txt

    r4282 r4322  
    1 t 
    2 t 
    3 t 
    4 t                                            
    5 t                                            
    6 t                                             
    7 t        
    8 t                            
    9 t                           
    10 t                            
    11 t  
    12 t          t             
    13 t 1   A   tt           v                   
    14 z#########################################################tttttttttttttttttttttttttttttt 
     1ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt 
     2t                                                                           t    .                   wt 
     3t                                                                           t M  .                   #t 
     4t                                                                           tttttt          ttttttttttt 
     5t                                                                                t                    t 
     6t                                                                                t   tttt             t 
     7t                                                                                t                    t 
     8t                                                                                t                    t 
     9t                                                                                t      v             t 
     10t                                           v                                    tttttttttt           t 
     11t                                     ttttttttttttt         +                                   h     t 
     12t          t                         tt           tt       ttt              t                  ttt    t 
     13t 1       tt           v            tt             tt     ttttt             t    v            ttttt   t 
     14z#########################################################ttttttttttttttttttttttttttttttttttttttttttttt 
Note: See TracChangeset for help on using the changeset viewer.