├── .gitattributes ├── .gitignore ├── .gitmodules ├── .paket └── Paket.Restore.targets ├── FSharpGameTutorial.code-workspace ├── LICENSE ├── README.md ├── assets ├── Slides │ ├── Dsl-Case-Study-in-Game-Development_16x9.pdf │ └── Internal-DSL-for-Game-GUI_16x9.pdf └── TopdownTanksRedux │ ├── License.txt │ ├── PNG │ ├── Default size │ │ ├── barrelBlack_side.png │ │ ├── barrelBlack_top.png │ │ ├── barrelGreen_side.png │ │ ├── barrelGreen_top.png │ │ ├── barrelRed_side.png │ │ ├── barrelRed_top.png │ │ ├── barrelRust_side.png │ │ ├── barrelRust_top.png │ │ ├── barricadeMetal.png │ │ ├── barricadeWood.png │ │ ├── bulletBlue1.png │ │ ├── bulletBlue1_outline.png │ │ ├── bulletBlue2.png │ │ ├── bulletBlue2_outline.png │ │ ├── bulletBlue3.png │ │ ├── bulletBlue3_outline.png │ │ ├── bulletDark1.png │ │ ├── bulletDark1_outline.png │ │ ├── bulletDark2.png │ │ ├── bulletDark2_outline.png │ │ ├── bulletDark3.png │ │ ├── bulletDark3_outline.png │ │ ├── bulletGreen1.png │ │ ├── bulletGreen1_outline.png │ │ ├── bulletGreen2.png │ │ ├── bulletGreen2_outline.png │ │ ├── bulletGreen3.png │ │ ├── bulletGreen3_outline.png │ │ ├── bulletRed1.png │ │ ├── bulletRed1_outline.png │ │ ├── bulletRed2.png │ │ ├── bulletRed2_outline.png │ │ ├── bulletRed3.png │ │ ├── bulletRed3_outline.png │ │ ├── bulletSand1.png │ │ ├── bulletSand1_outline.png │ │ ├── bulletSand2.png │ │ ├── bulletSand2_outline.png │ │ ├── bulletSand3.png │ │ ├── bulletSand3_outline.png │ │ ├── crateMetal.png │ │ ├── crateMetal_side.png │ │ ├── crateWood.png │ │ ├── crateWood_side.png │ │ ├── explosion1.png │ │ ├── explosion2.png │ │ ├── explosion3.png │ │ ├── explosion4.png │ │ ├── explosion5.png │ │ ├── explosionSmoke1.png │ │ ├── explosionSmoke2.png │ │ ├── explosionSmoke3.png │ │ ├── explosionSmoke4.png │ │ ├── explosionSmoke5.png │ │ ├── fenceRed.png │ │ ├── fenceYellow.png │ │ ├── oilSpill_large.png │ │ ├── oilSpill_small.png │ │ ├── sandbagBeige.png │ │ ├── sandbagBeige_open.png │ │ ├── sandbagBrown.png │ │ ├── sandbagBrown_open.png │ │ ├── shotLarge.png │ │ ├── shotOrange.png │ │ ├── shotRed.png │ │ ├── shotThin.png │ │ ├── specialBarrel1.png │ │ ├── specialBarrel1_outline.png │ │ ├── specialBarrel2.png │ │ ├── specialBarrel2_outline.png │ │ ├── specialBarrel3.png │ │ ├── specialBarrel3_outline.png │ │ ├── specialBarrel4.png │ │ ├── specialBarrel4_outline.png │ │ ├── specialBarrel5.png │ │ ├── specialBarrel5_outline.png │ │ ├── specialBarrel6.png │ │ ├── specialBarrel6_outline.png │ │ ├── specialBarrel7.png │ │ ├── specialBarrel7_outline.png │ │ ├── tankBlue_barrel1.png │ │ ├── tankBlue_barrel1_outline.png │ │ ├── tankBlue_barrel2.png │ │ ├── tankBlue_barrel2_outline.png │ │ ├── tankBlue_barrel3.png │ │ ├── tankBlue_barrel3_outline.png │ │ ├── tankBody_bigRed.png │ │ ├── tankBody_bigRed_outline.png │ │ ├── tankBody_blue.png │ │ ├── tankBody_blue_outline.png │ │ ├── tankBody_dark.png │ │ ├── tankBody_darkLarge.png │ │ ├── tankBody_darkLarge_outline.png │ │ ├── tankBody_dark_outline.png │ │ ├── tankBody_green.png │ │ ├── tankBody_green_outline.png │ │ ├── tankBody_huge.png │ │ ├── tankBody_huge_outline.png │ │ ├── tankBody_red.png │ │ ├── tankBody_red_outline.png │ │ ├── tankBody_sand.png │ │ ├── tankBody_sand_outline.png │ │ ├── tankDark_barrel1.png │ │ ├── tankDark_barrel1_outline.png │ │ ├── tankDark_barrel2.png │ │ ├── tankDark_barrel2_outline.png │ │ ├── tankDark_barrel3.png │ │ ├── tankDark_barrel3_outline.png │ │ ├── tankGreen_barrel1.png │ │ ├── tankGreen_barrel1_outline.png │ │ ├── tankGreen_barrel2.png │ │ ├── tankGreen_barrel2_outline.png │ │ ├── tankGreen_barrel3.png │ │ ├── tankGreen_barrel3_outline.png │ │ ├── tankRed_barrel1.png │ │ ├── tankRed_barrel1_outline.png │ │ ├── tankRed_barrel2.png │ │ ├── tankRed_barrel2_outline.png │ │ ├── tankRed_barrel3.png │ │ ├── tankRed_barrel3_outline.png │ │ ├── tankSand_barrel1.png │ │ ├── tankSand_barrel1_outline.png │ │ ├── tankSand_barrel2.png │ │ ├── tankSand_barrel2_outline.png │ │ ├── tankSand_barrel3.png │ │ ├── tankSand_barrel3_outline.png │ │ ├── tank_bigRed.png │ │ ├── tank_blue.png │ │ ├── tank_dark.png │ │ ├── tank_darkLarge.png │ │ ├── tank_green.png │ │ ├── tank_huge.png │ │ ├── tank_red.png │ │ ├── tank_sand.png │ │ ├── tileGrass1.png │ │ ├── tileGrass2.png │ │ ├── tileGrass_roadCornerLL.png │ │ ├── tileGrass_roadCornerLR.png │ │ ├── tileGrass_roadCornerUL.png │ │ ├── tileGrass_roadCornerUR.png │ │ ├── tileGrass_roadCrossing.png │ │ ├── tileGrass_roadCrossingRound.png │ │ ├── tileGrass_roadEast.png │ │ ├── tileGrass_roadNorth.png │ │ ├── tileGrass_roadSplitE.png │ │ ├── tileGrass_roadSplitN.png │ │ ├── tileGrass_roadSplitS.png │ │ ├── tileGrass_roadSplitW.png │ │ ├── tileGrass_roadTransitionE.png │ │ ├── tileGrass_roadTransitionE_dirt.png │ │ ├── tileGrass_roadTransitionN.png │ │ ├── tileGrass_roadTransitionN_dirt.png │ │ ├── tileGrass_roadTransitionS.png │ │ ├── tileGrass_roadTransitionS_dirt.png │ │ ├── tileGrass_roadTransitionW.png │ │ ├── tileGrass_roadTransitionW_dirt.png │ │ ├── tileGrass_transitionE.png │ │ ├── tileGrass_transitionN.png │ │ ├── tileGrass_transitionS.png │ │ ├── tileGrass_transitionW.png │ │ ├── tileSand1.png │ │ ├── tileSand2.png │ │ ├── tileSand_roadCornerLL.png │ │ ├── tileSand_roadCornerLR.png │ │ ├── tileSand_roadCornerUL.png │ │ ├── tileSand_roadCornerUR.png │ │ ├── tileSand_roadCrossing.png │ │ ├── tileSand_roadCrossingRound.png │ │ ├── tileSand_roadEast.png │ │ ├── tileSand_roadNorth.png │ │ ├── tileSand_roadSplitE.png │ │ ├── tileSand_roadSplitN.png │ │ ├── tileSand_roadSplitS.png │ │ ├── tileSand_roadSplitW.png │ │ ├── tracksDouble.png │ │ ├── tracksLarge.png │ │ ├── tracksSmall.png │ │ ├── treeBrown_large.png │ │ ├── treeBrown_leaf.png │ │ ├── treeBrown_small.png │ │ ├── treeBrown_twigs.png │ │ ├── treeGreen_large.png │ │ ├── treeGreen_leaf.png │ │ ├── treeGreen_small.png │ │ ├── treeGreen_twigs.png │ │ ├── wireCrooked.png │ │ └── wireStraight.png │ └── Retina │ │ ├── barrelBlack_side.png │ │ ├── barrelBlack_top.png │ │ ├── barrelGreen_side.png │ │ ├── barrelGreen_top.png │ │ ├── barrelRed_side.png │ │ ├── barrelRed_top.png │ │ ├── barrelRust_side.png │ │ ├── barrelRust_top.png │ │ ├── barricadeMetal.png │ │ ├── barricadeWood.png │ │ ├── bulletBlue1.png │ │ ├── bulletBlue1_outline.png │ │ ├── bulletBlue2.png │ │ ├── bulletBlue2_outline.png │ │ ├── bulletBlue3.png │ │ ├── bulletBlue3_outline.png │ │ ├── bulletDark1.png │ │ ├── bulletDark1_outline.png │ │ ├── bulletDark2.png │ │ ├── bulletDark2_outline.png │ │ ├── bulletDark3.png │ │ ├── bulletDark3_outline.png │ │ ├── bulletGreen1.png │ │ ├── bulletGreen1_outline.png │ │ ├── bulletGreen2.png │ │ ├── bulletGreen2_outline.png │ │ ├── bulletGreen3.png │ │ ├── bulletGreen3_outline.png │ │ ├── bulletRed1.png │ │ ├── bulletRed1_outline.png │ │ ├── bulletRed2.png │ │ ├── bulletRed2_outline.png │ │ ├── bulletRed3.png │ │ ├── bulletRed3_outline.png │ │ ├── bulletSand1.png │ │ ├── bulletSand1_outline.png │ │ ├── bulletSand2.png │ │ ├── bulletSand2_outline.png │ │ ├── bulletSand3.png │ │ ├── bulletSand3_outline.png │ │ ├── crateMetal.png │ │ ├── crateMetal_side.png │ │ ├── crateWood.png │ │ ├── crateWood_side.png │ │ ├── explosion1.png │ │ ├── explosion2.png │ │ ├── explosion3.png │ │ ├── explosion4.png │ │ ├── explosion5.png │ │ ├── explosionSmoke1.png │ │ ├── explosionSmoke2.png │ │ ├── explosionSmoke3.png │ │ ├── explosionSmoke4.png │ │ ├── explosionSmoke5.png │ │ ├── fenceRed.png │ │ ├── fenceYellow.png │ │ ├── oilSpill_large.png │ │ ├── oilSpill_small.png │ │ ├── sandbagBeige.png │ │ ├── sandbagBeige_open.png │ │ ├── sandbagBrown.png │ │ ├── sandbagBrown_open.png │ │ ├── shotLarge.png │ │ ├── shotOrange.png │ │ ├── shotRed.png │ │ ├── shotThin.png │ │ ├── specialBarrel1.png │ │ ├── specialBarrel1_outline.png │ │ ├── specialBarrel2.png │ │ ├── specialBarrel2_outline.png │ │ ├── specialBarrel3.png │ │ ├── specialBarrel3_outline.png │ │ ├── specialBarrel4.png │ │ ├── specialBarrel4_outline.png │ │ ├── specialBarrel5.png │ │ ├── specialBarrel5_outline.png │ │ ├── specialBarrel6.png │ │ ├── specialBarrel6_outline.png │ │ ├── specialBarrel7.png │ │ ├── specialBarrel7_outline.png │ │ ├── tankBlue_barrel1.png │ │ ├── tankBlue_barrel1_outline.png │ │ ├── tankBlue_barrel2.png │ │ ├── tankBlue_barrel2_outline.png │ │ ├── tankBlue_barrel3.png │ │ ├── tankBlue_barrel3_outline.png │ │ ├── tankBody_bigRed.png │ │ ├── tankBody_bigRed_outline.png │ │ ├── tankBody_blue.png │ │ ├── tankBody_blue_outline.png │ │ ├── tankBody_dark.png │ │ ├── tankBody_darkLarge.png │ │ ├── tankBody_darkLarge_outline.png │ │ ├── tankBody_dark_outline.png │ │ ├── tankBody_green.png │ │ ├── tankBody_green_outline.png │ │ ├── tankBody_huge.png │ │ ├── tankBody_huge_outline.png │ │ ├── tankBody_red.png │ │ ├── tankBody_red_outline.png │ │ ├── tankBody_sand.png │ │ ├── tankBody_sand_outline.png │ │ ├── tankDark_barrel1.png │ │ ├── tankDark_barrel1_outline.png │ │ ├── tankDark_barrel2.png │ │ ├── tankDark_barrel2_outline.png │ │ ├── tankDark_barrel3.png │ │ ├── tankDark_barrel3_outline.png │ │ ├── tankGreen_barrel1.png │ │ ├── tankGreen_barrel1_outline.png │ │ ├── tankGreen_barrel2.png │ │ ├── tankGreen_barrel2_outline.png │ │ ├── tankGreen_barrel3.png │ │ ├── tankGreen_barrel3_outline.png │ │ ├── tankRed_barrel1.png │ │ ├── tankRed_barrel1_outline.png │ │ ├── tankRed_barrel2.png │ │ ├── tankRed_barrel2_outline.png │ │ ├── tankRed_barrel3.png │ │ ├── tankRed_barrel3_outline.png │ │ ├── tankSand_barrel1.png │ │ ├── tankSand_barrel1_outline.png │ │ ├── tankSand_barrel2.png │ │ ├── tankSand_barrel2_outline.png │ │ ├── tankSand_barrel3.png │ │ ├── tankSand_barrel3_outline.png │ │ ├── tank_bigRed.png │ │ ├── tank_blue.png │ │ ├── tank_dark.png │ │ ├── tank_darkLarge.png │ │ ├── tank_green.png │ │ ├── tank_huge.png │ │ ├── tank_red.png │ │ ├── tank_sand.png │ │ ├── tileGrass1.png │ │ ├── tileGrass2.png │ │ ├── tileGrass_roadCornerLL.png │ │ ├── tileGrass_roadCornerLR.png │ │ ├── tileGrass_roadCornerUL.png │ │ ├── tileGrass_roadCornerUR.png │ │ ├── tileGrass_roadCrossing.png │ │ ├── tileGrass_roadCrossingRound.png │ │ ├── tileGrass_roadEast.png │ │ ├── tileGrass_roadNorth.png │ │ ├── tileGrass_roadSplitE.png │ │ ├── tileGrass_roadSplitN.png │ │ ├── tileGrass_roadSplitS.png │ │ ├── tileGrass_roadSplitW.png │ │ ├── tileGrass_roadTransitionE.png │ │ ├── tileGrass_roadTransitionE_dirt.png │ │ ├── tileGrass_roadTransitionN.png │ │ ├── tileGrass_roadTransitionN_dirt.png │ │ ├── tileGrass_roadTransitionS.png │ │ ├── tileGrass_roadTransitionS_dirt.png │ │ ├── tileGrass_roadTransitionW.png │ │ ├── tileGrass_roadTransitionW_dirt.png │ │ ├── tileGrass_transitionE.png │ │ ├── tileGrass_transitionN.png │ │ ├── tileGrass_transitionS.png │ │ ├── tileGrass_transitionW.png │ │ ├── tileSand1.png │ │ ├── tileSand2.png │ │ ├── tileSand_roadCornerLL.png │ │ ├── tileSand_roadCornerLR.png │ │ ├── tileSand_roadCornerUL.png │ │ ├── tileSand_roadCornerUR.png │ │ ├── tileSand_roadCrossing.png │ │ ├── tileSand_roadCrossingRound.png │ │ ├── tileSand_roadEast.png │ │ ├── tileSand_roadNorth.png │ │ ├── tileSand_roadSplitE.png │ │ ├── tileSand_roadSplitN.png │ │ ├── tileSand_roadSplitS.png │ │ ├── tileSand_roadSplitW.png │ │ ├── tracksDouble.png │ │ ├── tracksLarge.png │ │ ├── tracksSmall.png │ │ ├── treeBrown_large.png │ │ ├── treeBrown_leaf.png │ │ ├── treeBrown_small.png │ │ ├── treeBrown_twigs.png │ │ ├── treeGreen_large.png │ │ ├── treeGreen_leaf.png │ │ ├── treeGreen_small.png │ │ ├── treeGreen_twigs.png │ │ ├── wireCrooked.png │ │ └── wireStraight.png │ ├── Preview.png │ ├── Sample.png │ ├── Spritesheet │ ├── allSprites_default.png │ ├── allSprites_default.xml │ ├── allSprites_retina.png │ ├── allSprites_retina.xml │ ├── onlyObjects_default.png │ ├── onlyObjects_default.xml │ ├── onlyObjects_retina.png │ └── onlyObjects_retina.xml │ ├── Tilesheet │ ├── terrainTiles_default.png │ └── terrainTiles_retina.png │ ├── Vector │ ├── topdownTanks_vector.svg │ └── topdownTanks_vector.swf │ ├── Visit Kenney.url │ └── Visit Patreon.url ├── build.fsx ├── global.json ├── paket.dependencies ├── paket.lock ├── screenshots └── posts │ └── intro.png └── src ├── Game.Engine ├── Addon │ └── Mask.fs ├── Base │ ├── Addon.fs │ └── Component.fs ├── Comp_ │ └── Sprite.fs ├── Entity.fs ├── Extensions.fs ├── Game.Engine.fsproj ├── Game.fs ├── GameParam.fs ├── Helper.fs ├── Internal │ ├── Entity.fs │ └── Game.fs ├── Keyboard.fs ├── Logging.fs ├── MathF.fs ├── RELEASE_NOTES.md ├── Tile │ └── Map.fs ├── Types.fs └── paket.references ├── Game.Gui ├── Builder │ ├── Base.fs │ ├── Button.fs │ ├── Helper.fs │ ├── MenuItem.fs │ └── Text.fs ├── Extensions.fs ├── Game.Gui.fsproj ├── Gui.fs ├── Internal │ └── Gui.fs ├── RELEASE_NOTES.md ├── Types.fs └── paket.references ├── Game.TexturePacker ├── Game.TexturePacker.csproj ├── RELEASE_NOTES.md ├── TexturePackerLoader │ ├── SpriteFrame.cs │ ├── SpriteRender.cs │ ├── SpriteSheet.cs │ └── SpriteSheetLoader.cs └── paket.references ├── Tank.Content ├── Maps.cs ├── Sprites.cs ├── Tank.Content.csproj ├── Tank.tps ├── Textures.cs └── paket.references ├── Tank.Core ├── Game.fs ├── Tank.Core.fsproj ├── TankAddon.fs └── paket.references └── Tank.Sandbox ├── BarrelGui.fs ├── CameraGui.fs ├── Content ├── Tank.png └── Tank.txt ├── GuiHelper.fs ├── MainGui.fs ├── Maps ├── First.tmx └── Tiles.tsx ├── Program.fs ├── Tank.Sandbox.fsproj ├── TankGui.fs ├── TestGui.fs └── paket.references /.gitattributes: -------------------------------------------------------------------------------- 1 | assets/* linguist-vendored 2 | src/Tank.Content/* linguist-vendored 3 | 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.suo 8 | *.user 9 | *.userosscache 10 | *.sln.docstates 11 | 12 | # User-specific files (MonoDevelop/Xamarin Studio) 13 | *.userprefs 14 | 15 | # Build results 16 | [Dd]ebug/ 17 | [Dd]ebugPublic/ 18 | [Rr]elease/ 19 | [Rr]eleases/ 20 | x64/ 21 | x86/ 22 | bld/ 23 | [Bb]in/ 24 | [Oo]bj/ 25 | [Ll]og/ 26 | 27 | # Visual Studio 2015/2017 cache/options directory 28 | .vs/ 29 | # Uncomment if you have tasks that create the project's static files in wwwroot 30 | #wwwroot/ 31 | 32 | # Visual Studio 2017 auto generated files 33 | Generated\ Files/ 34 | 35 | # MSTest test Results 36 | [Tt]est[Rr]esult*/ 37 | [Bb]uild[Ll]og.* 38 | 39 | # NUNIT 40 | *.VisualState.xml 41 | TestResult.xml 42 | 43 | # Build Results of an ATL Project 44 | [Dd]ebugPS/ 45 | [Rr]eleasePS/ 46 | dlldata.c 47 | 48 | # Benchmark Results 49 | BenchmarkDotNet.Artifacts/ 50 | 51 | # .NET Core 52 | project.lock.json 53 | project.fragment.lock.json 54 | artifacts/ 55 | **/Properties/launchSettings.json 56 | 57 | # StyleCop 58 | StyleCopReport.xml 59 | 60 | # Files built by Visual Studio 61 | *_i.c 62 | *_p.c 63 | *_i.h 64 | *.ilk 65 | *.meta 66 | *.obj 67 | *.iobj 68 | *.pch 69 | *.pdb 70 | *.ipdb 71 | *.pgc 72 | *.pgd 73 | *.rsp 74 | *.sbr 75 | *.tlb 76 | *.tli 77 | *.tlh 78 | *.tmp 79 | *.tmp_proj 80 | *.log 81 | *.vspscc 82 | *.vssscc 83 | .builds 84 | *.pidb 85 | *.svclog 86 | *.scc 87 | 88 | # Chutzpah Test files 89 | _Chutzpah* 90 | 91 | # Visual C++ cache files 92 | ipch/ 93 | *.aps 94 | *.ncb 95 | *.opendb 96 | *.opensdf 97 | *.sdf 98 | *.cachefile 99 | *.VC.db 100 | *.VC.VC.opendb 101 | 102 | # Visual Studio profiler 103 | *.psess 104 | *.vsp 105 | *.vspx 106 | *.sap 107 | 108 | # Visual Studio Trace Files 109 | *.e2e 110 | 111 | # TFS 2012 Local Workspace 112 | $tf/ 113 | 114 | # Guidance Automation Toolkit 115 | *.gpState 116 | 117 | # ReSharper is a .NET coding add-in 118 | _ReSharper*/ 119 | *.[Rr]e[Ss]harper 120 | *.DotSettings.user 121 | 122 | # JustCode is a .NET coding add-in 123 | .JustCode 124 | 125 | # TeamCity is a build add-in 126 | _TeamCity* 127 | 128 | # DotCover is a Code Coverage Tool 129 | *.dotCover 130 | 131 | # AxoCover is a Code Coverage Tool 132 | .axoCover/* 133 | !.axoCover/settings.json 134 | 135 | # Visual Studio code coverage results 136 | *.coverage 137 | *.coveragexml 138 | 139 | # NCrunch 140 | _NCrunch_* 141 | .*crunch*.local.xml 142 | nCrunchTemp_* 143 | 144 | # MightyMoose 145 | *.mm.* 146 | AutoTest.Net/ 147 | 148 | # Web workbench (sass) 149 | .sass-cache/ 150 | 151 | # Installshield output folder 152 | [Ee]xpress/ 153 | 154 | # DocProject is a documentation generator add-in 155 | DocProject/buildhelp/ 156 | DocProject/Help/*.HxT 157 | DocProject/Help/*.HxC 158 | DocProject/Help/*.hhc 159 | DocProject/Help/*.hhk 160 | DocProject/Help/*.hhp 161 | DocProject/Help/Html2 162 | DocProject/Help/html 163 | 164 | # Click-Once directory 165 | publish/ 166 | 167 | # Publish Web Output 168 | *.[Pp]ublish.xml 169 | *.azurePubxml 170 | # Note: Comment the next line if you want to checkin your web deploy settings, 171 | # but database connection strings (with potential passwords) will be unencrypted 172 | *.pubxml 173 | *.publishproj 174 | 175 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 176 | # checkin your Azure Web App publish settings, but sensitive information contained 177 | # in these scripts will be unencrypted 178 | PublishScripts/ 179 | 180 | # NuGet Packages 181 | *.nupkg 182 | # The packages folder can be ignored because of Package Restore 183 | **/[Pp]ackages/* 184 | # except build/, which is used as an MSBuild target. 185 | !**/[Pp]ackages/build/ 186 | # Uncomment if necessary however generally it will be regenerated when needed 187 | #!**/[Pp]ackages/repositories.config 188 | # NuGet v3's project.json files produces more ignorable files 189 | *.nuget.props 190 | *.nuget.targets 191 | 192 | # Microsoft Azure Build Output 193 | csx/ 194 | *.build.csdef 195 | 196 | # Microsoft Azure Emulator 197 | ecf/ 198 | rcf/ 199 | 200 | # Windows Store app package directories and files 201 | AppPackages/ 202 | BundleArtifacts/ 203 | Package.StoreAssociation.xml 204 | _pkginfo.txt 205 | *.appx 206 | 207 | # Visual Studio cache files 208 | # files ending in .cache can be ignored 209 | *.[Cc]ache 210 | # but keep track of directories ending in .cache 211 | !*.[Cc]ache/ 212 | 213 | # Others 214 | ClientBin/ 215 | ~$* 216 | *~ 217 | *.dbmdl 218 | *.dbproj.schemaview 219 | *.jfm 220 | *.pfx 221 | *.publishsettings 222 | orleans.codegen.cs 223 | 224 | # Including strong name files can present a security risk 225 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 226 | #*.snk 227 | 228 | # Since there are multiple workflows, uncomment next line to ignore bower_components 229 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 230 | #bower_components/ 231 | 232 | # RIA/Silverlight projects 233 | Generated_Code/ 234 | 235 | # Backup & report files from converting an old project file 236 | # to a newer Visual Studio version. Backup files are not needed, 237 | # because we have git ;-) 238 | _UpgradeReport_Files/ 239 | Backup*/ 240 | UpgradeLog*.XML 241 | UpgradeLog*.htm 242 | ServiceFabricBackup/ 243 | *.rptproj.bak 244 | 245 | # SQL Server files 246 | *.mdf 247 | *.ldf 248 | *.ndf 249 | 250 | # Business Intelligence projects 251 | *.rdl.data 252 | *.bim.layout 253 | *.bim_*.settings 254 | *.rptproj.rsuser 255 | 256 | # Microsoft Fakes 257 | FakesAssemblies/ 258 | 259 | # GhostDoc plugin setting file 260 | *.GhostDoc.xml 261 | 262 | # Node.js Tools for Visual Studio 263 | .ntvs_analysis.dat 264 | node_modules/ 265 | 266 | # Visual Studio 6 build log 267 | *.plg 268 | 269 | # Visual Studio 6 workspace options file 270 | *.opt 271 | 272 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 273 | *.vbw 274 | 275 | # Visual Studio LightSwitch build output 276 | **/*.HTMLClient/GeneratedArtifacts 277 | **/*.DesktopClient/GeneratedArtifacts 278 | **/*.DesktopClient/ModelManifest.xml 279 | **/*.Server/GeneratedArtifacts 280 | **/*.Server/ModelManifest.xml 281 | _Pvt_Extensions 282 | 283 | # Paket dependency manager 284 | .paket/paket.exe 285 | paket-files/ 286 | 287 | # FAKE - F# Make 288 | .fake/ 289 | 290 | # JetBrains Rider 291 | .idea/ 292 | *.sln.iml 293 | 294 | # CodeRush 295 | .cr/ 296 | 297 | # Python Tools for Visual Studio (PTVS) 298 | __pycache__/ 299 | *.pyc 300 | 301 | # Cake - Uncomment if you are using it 302 | # tools/** 303 | # !tools/packages.config 304 | 305 | # Tabs Studio 306 | *.tss 307 | 308 | # Telerik's JustMock configuration file 309 | *.jmconfig 310 | 311 | # BizTalk build output 312 | *.btp.cs 313 | *.btm.cs 314 | *.odx.cs 315 | *.xsd.cs 316 | 317 | # OpenCover UI analysis results 318 | OpenCover/ 319 | 320 | # Azure Stream Analytics local run output 321 | ASALocalRun/ 322 | 323 | # MSBuild Binary and Structured Log 324 | *.binlog 325 | 326 | # NVidia Nsight GPU debugger configuration file 327 | *.nvuser 328 | 329 | # MFractors (Xamarin productivity tool) working folder 330 | .mfractor/ 331 | .ionide/ 332 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/TexturePacker-MonoGame-Demo"] 2 | path = lib/TexturePacker-MonoGame-Demo 3 | url = git@github.com:CodeAndWeb/TexturePacker-MonoGame-Demo.git 4 | -------------------------------------------------------------------------------- /FSharpGameTutorial.code-workspace: -------------------------------------------------------------------------------- 1 | { 2 | "folders": [ 3 | { 4 | "path": "src/Game.TexturePacker" 5 | }, 6 | { 7 | "path": "src/Game.Engine" 8 | }, 9 | { 10 | "path": "src/Game.Gui" 11 | }, 12 | { 13 | "path": "src/Tank.Content" 14 | }, 15 | { 16 | "path": "src/Tank.Core" 17 | }, 18 | { 19 | "path": "src/Tank.Sandbox" 20 | }, 21 | ], 22 | "settings": { 23 | "files.exclude": { 24 | "**/bin": true, 25 | "**/obj": true, 26 | "*.log": true, 27 | "**/log" : true, 28 | ".vs": true, 29 | ".vscode": true, 30 | ".gitkeep" : true, 31 | "node_modules": true 32 | }, 33 | "cSpell.language": "en", 34 | "cSpell.words": [ 35 | "Elmish", 36 | "Guid", 37 | "failwith", 38 | "hardcoded", 39 | "initer", 40 | "platformer", 41 | "rect", 42 | "sprintf", 43 | "struct", 44 | "typeof" 45 | ] 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 YJ Park 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | I've been working on game development for a few years now, making game is indeed quite fun, it shares much with other kind of software development, while it also has its uniqueness. Always wanted to write more on it, though not really have good idea about how to start. 2 | 3 | I've been working with a couple of game engines, mostly Unity3D, IwGame on Marmalade, Cocos2D, Phaser, created some own frameworks, did experiment with a very simple game engine in Elm as well. Most of them were designed in a similar way, provide similar components and tools. As game developers, we usually don't need to dig much in the game engine itself, but we should have a rather clear understanding about its structure so we can work on it efficiently. 4 | 5 | I've decided to write some tutorials on game development, a very basic one, in my mind, it's mostly for developers without much experiences with game development, but curious in it. I'll try to share some of my understandings with game development, explain core components of game engine. 6 | 7 | ![Screen Shot](https://github.com/yjpark/FSharpGameTutorial/raw/master/screenshots/posts/intro.png) 8 | 9 | ## A 2D Tank Game 10 | Current plan is to create a simple 2D topdown tank game in this tutorial, which is easy to understand, and have enough potential complexity as a real game. Not sure about what will eventually be covered, but at least got following ideas that worth writing about 11 | 12 | - Map system, the maps will be created with Tiled map editor https://www.mapeditor.org/ 13 | - GUI for game itself, and for development 14 | - The tank will have different weapon system, the parameters can be changed by buffs 15 | - Special abilities that can be added with pickable items on map 16 | - Enemies can be either tanks or other units, which need basic AI system to act by themself 17 | - A couple game mechanics to give player purpose, and hopefully fun. 18 | - Common features for games, such as achievements, charts, tutorials... 19 | 20 | If possible also really want to write about real-time network game development, so ideally this tank game will be multi-player ! 21 | 22 | ## Why F# ? 23 | To make it even more fun for the potential readers, I choose F# as the language for this tutorial, in my opinion, F# is very suitable for learning, it's quite clean and concise, and it support both functional paradigm and object oriented paradigm, also it's a part of DotNet ecosystem, and have full access to all C# libraries. Even if you won't write F# code in the project, learning it can make you a bette developer with C# or other languages. 24 | 25 | I don't plan to write too much about F# itself, there are many good F# tutorials on the web, personally I learned mainly from these two sites 26 | 27 | - https://fsharpforfunandprofit.com/ 28 | - https://fsharp.org/ 29 | 30 | If you have coding experience in most modern programming language, should not take much time to get familiar with F# syntax, don't need to be expert to follow this tutorial. 31 | 32 | It's not very practical to take pure functional approach in games, since for better performance, most game engines rely on mutable data structures, it's still possible to do it in pure functional way, at least for smaller games, but here I'll just focus on more traditional object-oriented way, so the ideas in this tutorial can be easily used in most game engines. 33 | 34 | ## DotNet Core with MonoGame 35 | I'll build the tutorial on DotNet Core, which is cross-platform, have a great toolchain. 36 | 37 | I use Visual Studio Code as main IDE, it's really good, the Vim binding is good, after setup a few shortcuts and some configuration, I feel very comfortable with it. The F# support is quite nice, still have a few issues, though mainly nice to use. 38 | 39 | - https://dotnet.microsoft.com/ 40 | - https://code.visualstudio.com/ 41 | 42 | I choose MonoGame as the low level platform, will create very simple engine on top of it, it's not officially on DotNet Core yet, but a nice developer (cra0zy) did create a core version and put on nuget, I'll use this package in my tutorial 43 | 44 | - http://www.monogame.net/ 45 | - https://www.nuget.org/packages/MonoGame.Framework.DesktopGL.Core/ 46 | 47 | Was thinking about use Fable and Pixi to create HTML5 games, which will be very cool too, though that approach need to bring more dependencies, and might make the whole process a bit complex for new comers, so I end up with MonoGame. 48 | 49 | ## The Plan 50 | I'll keep working on the prototype, in the meantime, will start writing the tutorial, will be organized by topics, certain branches will be created for each post, also all the contents will be put into the repository as wiki pages. 51 | 52 | ## Please Check Wiki for List of Finished and Planned Post 53 | -------------------------------------------------------------------------------- /assets/Slides/Dsl-Case-Study-in-Game-Development_16x9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/Slides/Dsl-Case-Study-in-Game-Development_16x9.pdf -------------------------------------------------------------------------------- /assets/Slides/Internal-DSL-for-Game-GUI_16x9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/Slides/Internal-DSL-for-Game-GUI_16x9.pdf -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/License.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | Top-down Tanks Redux 4 | 5 | by Kenney Vleugels (Kenney.nl) 6 | 7 | ------------------------------ 8 | 9 | License (Creative Commons Zero, CC0) 10 | http://creativecommons.org/publicdomain/zero/1.0/ 11 | 12 | You may use these assets in personal and commercial projects. 13 | Credit (Kenney or www.kenney.nl) would be nice but is not mandatory. 14 | 15 | ------------------------------ 16 | 17 | Donate: http://support.kenney.nl 18 | Request: http://request.kenney.nl 19 | 20 | Follow on Twitter for updates: 21 | @KenneyNL -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/barrelBlack_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/barrelBlack_side.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/barrelBlack_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/barrelBlack_top.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/barrelGreen_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/barrelGreen_side.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/barrelGreen_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/barrelGreen_top.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/barrelRed_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/barrelRed_side.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/barrelRed_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/barrelRed_top.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/barrelRust_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/barrelRust_side.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/barrelRust_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/barrelRust_top.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/barricadeMetal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/barricadeMetal.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/barricadeWood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/barricadeWood.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletBlue1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletBlue1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletBlue1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletBlue1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletBlue2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletBlue2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletBlue2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletBlue2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletBlue3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletBlue3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletBlue3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletBlue3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletDark1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletDark1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletDark1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletDark1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletDark2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletDark2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletDark2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletDark2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletDark3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletDark3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletDark3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletDark3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletGreen1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletGreen1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletGreen1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletGreen1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletGreen2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletGreen2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletGreen2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletGreen2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletGreen3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletGreen3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletGreen3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletGreen3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletRed1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletRed1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletRed1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletRed1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletRed2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletRed2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletRed2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletRed2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletRed3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletRed3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletRed3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletRed3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletSand1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletSand1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletSand1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletSand1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletSand2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletSand2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletSand2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletSand2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletSand3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletSand3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/bulletSand3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/bulletSand3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/crateMetal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/crateMetal.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/crateMetal_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/crateMetal_side.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/crateWood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/crateWood.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/crateWood_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/crateWood_side.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/explosion1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/explosion1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/explosion2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/explosion2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/explosion3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/explosion3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/explosion4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/explosion4.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/explosion5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/explosion5.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/explosionSmoke1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/explosionSmoke1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/explosionSmoke2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/explosionSmoke2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/explosionSmoke3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/explosionSmoke3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/explosionSmoke4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/explosionSmoke4.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/explosionSmoke5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/explosionSmoke5.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/fenceRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/fenceRed.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/fenceYellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/fenceYellow.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/oilSpill_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/oilSpill_large.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/oilSpill_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/oilSpill_small.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/sandbagBeige.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/sandbagBeige.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/sandbagBeige_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/sandbagBeige_open.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/sandbagBrown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/sandbagBrown.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/sandbagBrown_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/sandbagBrown_open.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/shotLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/shotLarge.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/shotOrange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/shotOrange.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/shotRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/shotRed.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/shotThin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/shotThin.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/specialBarrel1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/specialBarrel1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/specialBarrel1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/specialBarrel1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/specialBarrel2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/specialBarrel2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/specialBarrel2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/specialBarrel2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/specialBarrel3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/specialBarrel3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/specialBarrel3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/specialBarrel3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/specialBarrel4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/specialBarrel4.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/specialBarrel4_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/specialBarrel4_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/specialBarrel5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/specialBarrel5.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/specialBarrel5_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/specialBarrel5_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/specialBarrel6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/specialBarrel6.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/specialBarrel6_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/specialBarrel6_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/specialBarrel7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/specialBarrel7.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/specialBarrel7_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/specialBarrel7_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBlue_barrel1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBlue_barrel1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBlue_barrel1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBlue_barrel1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBlue_barrel2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBlue_barrel2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBlue_barrel2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBlue_barrel2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBlue_barrel3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBlue_barrel3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBlue_barrel3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBlue_barrel3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_bigRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_bigRed.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_bigRed_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_bigRed_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_blue.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_blue_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_blue_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_dark.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_darkLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_darkLarge.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_darkLarge_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_darkLarge_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_dark_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_dark_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_green.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_green_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_green_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_huge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_huge.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_huge_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_huge_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_red.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_red_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_red_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_sand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_sand.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankBody_sand_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankBody_sand_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankDark_barrel1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankDark_barrel1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankDark_barrel1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankDark_barrel1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankDark_barrel2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankDark_barrel2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankDark_barrel2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankDark_barrel2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankDark_barrel3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankDark_barrel3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankDark_barrel3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankDark_barrel3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankGreen_barrel1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankGreen_barrel1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankGreen_barrel1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankGreen_barrel1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankGreen_barrel2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankGreen_barrel2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankGreen_barrel2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankGreen_barrel2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankGreen_barrel3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankGreen_barrel3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankGreen_barrel3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankGreen_barrel3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankRed_barrel1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankRed_barrel1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankRed_barrel1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankRed_barrel1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankRed_barrel2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankRed_barrel2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankRed_barrel2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankRed_barrel2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankRed_barrel3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankRed_barrel3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankRed_barrel3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankRed_barrel3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankSand_barrel1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankSand_barrel1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankSand_barrel1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankSand_barrel1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankSand_barrel2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankSand_barrel2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankSand_barrel2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankSand_barrel2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankSand_barrel3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankSand_barrel3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tankSand_barrel3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tankSand_barrel3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tank_bigRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tank_bigRed.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tank_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tank_blue.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tank_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tank_dark.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tank_darkLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tank_darkLarge.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tank_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tank_green.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tank_huge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tank_huge.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tank_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tank_red.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tank_sand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tank_sand.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadCornerLL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadCornerLL.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadCornerLR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadCornerLR.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadCornerUL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadCornerUL.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadCornerUR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadCornerUR.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadCrossing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadCrossing.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadCrossingRound.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadCrossingRound.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadEast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadEast.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadNorth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadNorth.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadSplitE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadSplitE.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadSplitN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadSplitN.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadSplitS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadSplitS.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadSplitW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadSplitW.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionE.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionE_dirt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionE_dirt.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionN.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionN_dirt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionN_dirt.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionS.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionS_dirt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionS_dirt.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionW.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionW_dirt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_roadTransitionW_dirt.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_transitionE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_transitionE.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_transitionN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_transitionN.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_transitionS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_transitionS.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileGrass_transitionW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileGrass_transitionW.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileSand1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileSand1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileSand2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileSand2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileSand_roadCornerLL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileSand_roadCornerLL.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileSand_roadCornerLR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileSand_roadCornerLR.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileSand_roadCornerUL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileSand_roadCornerUL.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileSand_roadCornerUR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileSand_roadCornerUR.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileSand_roadCrossing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileSand_roadCrossing.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileSand_roadCrossingRound.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileSand_roadCrossingRound.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileSand_roadEast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileSand_roadEast.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileSand_roadNorth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileSand_roadNorth.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileSand_roadSplitE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileSand_roadSplitE.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileSand_roadSplitN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileSand_roadSplitN.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileSand_roadSplitS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileSand_roadSplitS.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tileSand_roadSplitW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tileSand_roadSplitW.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tracksDouble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tracksDouble.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tracksLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tracksLarge.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/tracksSmall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/tracksSmall.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/treeBrown_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/treeBrown_large.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/treeBrown_leaf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/treeBrown_leaf.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/treeBrown_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/treeBrown_small.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/treeBrown_twigs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/treeBrown_twigs.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/treeGreen_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/treeGreen_large.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/treeGreen_leaf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/treeGreen_leaf.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/treeGreen_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/treeGreen_small.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/treeGreen_twigs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/treeGreen_twigs.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/wireCrooked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/wireCrooked.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Default size/wireStraight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Default size/wireStraight.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/barrelBlack_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/barrelBlack_side.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/barrelBlack_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/barrelBlack_top.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/barrelGreen_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/barrelGreen_side.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/barrelGreen_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/barrelGreen_top.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/barrelRed_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/barrelRed_side.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/barrelRed_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/barrelRed_top.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/barrelRust_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/barrelRust_side.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/barrelRust_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/barrelRust_top.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/barricadeMetal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/barricadeMetal.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/barricadeWood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/barricadeWood.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletBlue1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletBlue1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletBlue1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletBlue1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletBlue2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletBlue2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletBlue2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletBlue2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletBlue3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletBlue3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletBlue3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletBlue3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletDark1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletDark1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletDark1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletDark1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletDark2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletDark2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletDark2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletDark2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletDark3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletDark3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletDark3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletDark3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletGreen1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletGreen1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletGreen1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletGreen1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletGreen2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletGreen2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletGreen2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletGreen2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletGreen3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletGreen3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletGreen3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletGreen3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletRed1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletRed1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletRed1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletRed1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletRed2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletRed2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletRed2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletRed2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletRed3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletRed3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletRed3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletRed3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletSand1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletSand1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletSand1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletSand1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletSand2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletSand2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletSand2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletSand2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletSand3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletSand3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/bulletSand3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/bulletSand3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/crateMetal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/crateMetal.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/crateMetal_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/crateMetal_side.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/crateWood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/crateWood.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/crateWood_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/crateWood_side.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/explosion1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/explosion1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/explosion2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/explosion2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/explosion3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/explosion3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/explosion4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/explosion4.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/explosion5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/explosion5.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/explosionSmoke1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/explosionSmoke1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/explosionSmoke2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/explosionSmoke2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/explosionSmoke3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/explosionSmoke3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/explosionSmoke4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/explosionSmoke4.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/explosionSmoke5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/explosionSmoke5.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/fenceRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/fenceRed.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/fenceYellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/fenceYellow.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/oilSpill_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/oilSpill_large.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/oilSpill_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/oilSpill_small.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/sandbagBeige.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/sandbagBeige.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/sandbagBeige_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/sandbagBeige_open.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/sandbagBrown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/sandbagBrown.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/sandbagBrown_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/sandbagBrown_open.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/shotLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/shotLarge.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/shotOrange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/shotOrange.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/shotRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/shotRed.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/shotThin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/shotThin.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/specialBarrel1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/specialBarrel1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/specialBarrel1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/specialBarrel1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/specialBarrel2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/specialBarrel2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/specialBarrel2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/specialBarrel2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/specialBarrel3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/specialBarrel3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/specialBarrel3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/specialBarrel3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/specialBarrel4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/specialBarrel4.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/specialBarrel4_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/specialBarrel4_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/specialBarrel5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/specialBarrel5.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/specialBarrel5_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/specialBarrel5_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/specialBarrel6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/specialBarrel6.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/specialBarrel6_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/specialBarrel6_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/specialBarrel7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/specialBarrel7.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/specialBarrel7_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/specialBarrel7_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBlue_barrel1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBlue_barrel1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBlue_barrel1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBlue_barrel1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBlue_barrel2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBlue_barrel2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBlue_barrel2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBlue_barrel2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBlue_barrel3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBlue_barrel3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBlue_barrel3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBlue_barrel3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_bigRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_bigRed.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_bigRed_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_bigRed_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_blue.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_blue_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_blue_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_dark.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_darkLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_darkLarge.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_darkLarge_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_darkLarge_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_dark_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_dark_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_green.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_green_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_green_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_huge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_huge.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_huge_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_huge_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_red.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_red_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_red_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_sand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_sand.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankBody_sand_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankBody_sand_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankDark_barrel1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankDark_barrel1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankDark_barrel1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankDark_barrel1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankDark_barrel2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankDark_barrel2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankDark_barrel2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankDark_barrel2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankDark_barrel3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankDark_barrel3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankDark_barrel3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankDark_barrel3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankGreen_barrel1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankGreen_barrel1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankGreen_barrel1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankGreen_barrel1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankGreen_barrel2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankGreen_barrel2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankGreen_barrel2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankGreen_barrel2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankGreen_barrel3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankGreen_barrel3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankGreen_barrel3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankGreen_barrel3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankRed_barrel1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankRed_barrel1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankRed_barrel1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankRed_barrel1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankRed_barrel2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankRed_barrel2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankRed_barrel2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankRed_barrel2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankRed_barrel3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankRed_barrel3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankRed_barrel3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankRed_barrel3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankSand_barrel1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankSand_barrel1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankSand_barrel1_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankSand_barrel1_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankSand_barrel2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankSand_barrel2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankSand_barrel2_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankSand_barrel2_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankSand_barrel3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankSand_barrel3.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tankSand_barrel3_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tankSand_barrel3_outline.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tank_bigRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tank_bigRed.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tank_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tank_blue.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tank_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tank_dark.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tank_darkLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tank_darkLarge.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tank_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tank_green.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tank_huge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tank_huge.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tank_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tank_red.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tank_sand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tank_sand.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadCornerLL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadCornerLL.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadCornerLR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadCornerLR.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadCornerUL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadCornerUL.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadCornerUR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadCornerUR.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadCrossing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadCrossing.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadCrossingRound.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadCrossingRound.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadEast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadEast.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadNorth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadNorth.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadSplitE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadSplitE.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadSplitN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadSplitN.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadSplitS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadSplitS.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadSplitW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadSplitW.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionE.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionE_dirt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionE_dirt.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionN.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionN_dirt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionN_dirt.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionS.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionS_dirt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionS_dirt.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionW.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionW_dirt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_roadTransitionW_dirt.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_transitionE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_transitionE.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_transitionN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_transitionN.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_transitionS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_transitionS.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileGrass_transitionW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileGrass_transitionW.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileSand1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileSand1.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileSand2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileSand2.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileSand_roadCornerLL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileSand_roadCornerLL.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileSand_roadCornerLR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileSand_roadCornerLR.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileSand_roadCornerUL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileSand_roadCornerUL.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileSand_roadCornerUR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileSand_roadCornerUR.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileSand_roadCrossing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileSand_roadCrossing.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileSand_roadCrossingRound.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileSand_roadCrossingRound.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileSand_roadEast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileSand_roadEast.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileSand_roadNorth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileSand_roadNorth.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileSand_roadSplitE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileSand_roadSplitE.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileSand_roadSplitN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileSand_roadSplitN.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileSand_roadSplitS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileSand_roadSplitS.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tileSand_roadSplitW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tileSand_roadSplitW.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tracksDouble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tracksDouble.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tracksLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tracksLarge.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/tracksSmall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/tracksSmall.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/treeBrown_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/treeBrown_large.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/treeBrown_leaf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/treeBrown_leaf.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/treeBrown_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/treeBrown_small.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/treeBrown_twigs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/treeBrown_twigs.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/treeGreen_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/treeGreen_large.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/treeGreen_leaf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/treeGreen_leaf.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/treeGreen_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/treeGreen_small.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/treeGreen_twigs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/treeGreen_twigs.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/wireCrooked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/wireCrooked.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/PNG/Retina/wireStraight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/PNG/Retina/wireStraight.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/Preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/Preview.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/Sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/Sample.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/Spritesheet/allSprites_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/Spritesheet/allSprites_default.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/Spritesheet/allSprites_retina.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/Spritesheet/allSprites_retina.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/Spritesheet/onlyObjects_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/Spritesheet/onlyObjects_default.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/Spritesheet/onlyObjects_retina.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/Spritesheet/onlyObjects_retina.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/Tilesheet/terrainTiles_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/Tilesheet/terrainTiles_default.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/Tilesheet/terrainTiles_retina.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/Tilesheet/terrainTiles_retina.png -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/Vector/topdownTanks_vector.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/assets/TopdownTanksRedux/Vector/topdownTanks_vector.swf -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/Visit Kenney.url: -------------------------------------------------------------------------------- 1 | [InternetShortcut] 2 | URL=http://www.kenney.nl/ -------------------------------------------------------------------------------- /assets/TopdownTanksRedux/Visit Patreon.url: -------------------------------------------------------------------------------- 1 | [InternetShortcut] 2 | URL=https://www.patreon.com/kenney/ -------------------------------------------------------------------------------- /build.fsx: -------------------------------------------------------------------------------- 1 | #r "paket: groupref Main //" 2 | #load ".fake/build.fsx/intellisense.fsx" 3 | 4 | open Fake.Core 5 | open Fake.Core.TargetOperators 6 | open Fake.IO 7 | open Fake.IO.Globbing.Operators 8 | 9 | open Dap.Build 10 | 11 | module NuGet = Dap.Build.NuGet 12 | 13 | let feed = 14 | NuGet.Feed.Create ( 15 | apiKey = NuGet.Environment "API_KEY_nuget_org" 16 | ) 17 | 18 | let libProjects = 19 | 20 | !! "src/Game.TexturePacker/*.csproj" 21 | ++ "src/Game.Engine/*.fsproj" 22 | ++ "src/Game.Gui/*.fsproj" 23 | 24 | let allProjects = 25 | libProjects 26 | ++ "src/Tank.Content/*.csproj" 27 | ++ "src/Tank.Core/*.fsproj" 28 | ++ "src/Tank.Sandbox/*.fsproj" 29 | 30 | //let options = NuGet.mixed libProjects 31 | let options = NuGet.release 32 | 33 | DotNet.create options allProjects 34 | 35 | NuGet.extend options feed libProjects 36 | 37 | Target.runOrDefault DotNet.Build 38 | -------------------------------------------------------------------------------- /global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "3.1.403" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /paket.dependencies: -------------------------------------------------------------------------------- 1 | version 5.193.0 2 | 3 | source https://nuget.yjpark.org/nuget/dap 4 | source https://www.nuget.org/api/v2 5 | storage: none 6 | framework: auto-detect 7 | 8 | nuget FSharp.Core 9 | 10 | nuget Argu 11 | # nuget MonoGame.Content.Builder 12 | nuget MonoGame.Framework.DesktopGL 13 | nuget Myra 14 | nuget Comora 15 | nuget TiledSharp 16 | 17 | nuget Dap.Context 18 | nuget Dap.Local 19 | 20 | # Build 21 | nuget Dap.Build 22 | -------------------------------------------------------------------------------- /screenshots/posts/intro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yjpark/FSharpGameTutorial/51ee074cb738308cdc95725e18383c9b341947c7/screenshots/posts/intro.png -------------------------------------------------------------------------------- /src/Game.Engine/Addon/Mask.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Engine.Addon.Mask 3 | 4 | open Microsoft.Xna.Framework 5 | open Microsoft.Xna.Framework.Graphics 6 | 7 | open Game.Engine 8 | open Game.Engine.Base 9 | 10 | type Mask (rect : Rectangle, color : Color, game : IGame) = 11 | inherit Addon(game) 12 | let texture = new Texture2D (game.Graphics.Device, 1, 1) 13 | do ( 14 | texture.SetData ( [| color |] ) 15 | ) 16 | override __.LateDraw () = 17 | game.Graphics.End () 18 | game.Graphics.SpriteBatch.Begin () 19 | game.Graphics.SpriteBatch.Draw (texture, rect, color) 20 | game.Batch () 21 | static member Create rect color game = new Mask (rect, color, game) -------------------------------------------------------------------------------- /src/Game.Engine/Base/Addon.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Engine.Base.Addon 3 | 4 | open Dap.Prelude 5 | 6 | open Game.Engine 7 | 8 | [] 9 | type Addon (game : IGame) as _this = 10 | let kind = (_this.GetType ()).Name 11 | let logger : ILogger = getLogger <| sprintf "%s:%s" game.Param.Name kind 12 | 13 | abstract member Update : unit -> unit 14 | abstract member Draw : unit -> unit 15 | abstract member LateUpdate : unit -> unit 16 | abstract member LateDraw : unit -> unit 17 | 18 | default __.Update () = () 19 | default __.Draw () = () 20 | default __.LateUpdate () = () 21 | default __.LateDraw () = () 22 | 23 | interface IAddon with 24 | member __.Game = game 25 | member this.Update () = this.Update () 26 | member this.Draw () = this.Draw () 27 | member this.LateUpdate () = this.LateUpdate () 28 | member this.LateDraw () = this.LateDraw () 29 | interface ILogger with 30 | member __.Log evt = logger.Log evt -------------------------------------------------------------------------------- /src/Game.Engine/Base/Component.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Engine.Base.Component 3 | 4 | open Game.Engine 5 | 6 | [] 7 | type Component (entity : IEntity) = 8 | let mutable enabled : bool = true 9 | abstract member Update : unit -> unit 10 | abstract member Draw : unit -> unit 11 | 12 | default __.Update () = () 13 | default __.Draw () = () 14 | interface IComponent with 15 | member __.Entity = entity 16 | member __.Enabled 17 | with get () = enabled 18 | and set (a : bool) = enabled <- a 19 | member this.Update () = 20 | this.Update () 21 | member this.Draw () = 22 | this.Draw () 23 | member this.AsComponent = this :> IComponent 24 | -------------------------------------------------------------------------------- /src/Game.Engine/Comp_/Sprite.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Engine.Sprite 3 | 4 | open System 5 | open TexturePackerLoader 6 | 7 | open Dap.Prelude 8 | 9 | open Game.Engine 10 | open Game.Engine.Base 11 | open TiledSharp 12 | 13 | type Sprite (_name : string, entity : IEntity) = 14 | inherit Component (entity) 15 | let mutable sprite = entity.Game.Atlas.Sprite _name 16 | let mutable color : Color = Color.White 17 | override __.Draw () = 18 | let render = entity.Game.Graphics.SpriteRender 19 | render.Draw (sprite, entity.Transform.AbsolutePosition, 20 | color = color, 21 | rotation = entity.Transform.AbsoluteRotation, 22 | scale = entity.Transform.AbsoluteScale.X) 23 | member __.Sprite 24 | with get () = sprite 25 | and set (s : SpriteFrame) = sprite <- s 26 | member __.SetSprite (name : string) = 27 | sprite <- entity.Game.Atlas.Sprite name 28 | member __.Color 29 | with get () = color 30 | and set (c : Color) = color <- c 31 | static member Create n (entity : IEntity) = 32 | Sprite (n, entity) 33 | :> IComponent 34 | -------------------------------------------------------------------------------- /src/Game.Engine/Entity.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Engine.Entity 3 | 4 | open Dap.Prelude 5 | open Game.Engine.Internal 6 | 7 | let add (key : string) (game : IGame) = 8 | game.Root.AddChild key |> ignore 9 | game 10 | -------------------------------------------------------------------------------- /src/Game.Engine/Extensions.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Engine.Extensions 3 | 4 | open System 5 | 6 | open Transform 7 | 8 | type Transform2D with 9 | member this.Angle 10 | with get () = MathF.radianToAngle this.Rotation 11 | and set (a : float32) = this.Rotation <- MathF.angleToRadian a 12 | member this.AbsoluteAngle 13 | with get () = MathF.radianToAngle this.AbsoluteRotation 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/Game.Engine/Game.Engine.fsproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | netstandard2.0 4 | https://github.com/yjpark/FsharpGameTutorial 5 | fsharp; 6 | YJ Park 7 | 0.1.0 8 | Simple Game Engine in F# Based on MonoGame 9 | $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /src/Game.Engine/Game.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Engine.Game 3 | 4 | open Dap.Prelude 5 | open Game.Engine.Internal 6 | 7 | [] 8 | let ContentRoot = "Content" 9 | 10 | let create (param : GameParam) : IGame = 11 | let game = new Game (param) 12 | game.Setup (ContentRoot) 13 | game.Run () 14 | game :> IGame -------------------------------------------------------------------------------- /src/Game.Engine/GameParam.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Engine.GameParam 3 | 4 | open Dap.Prelude 5 | 6 | open Game.Engine.Addon 7 | 8 | let withExitKey (key : Keys) (param : GameParam) : GameParam = 9 | {param with ExitKey = Some key} 10 | 11 | let withSetup (setup : IGame -> unit) (param : GameParam) : GameParam = 12 | {param with Initializers = param.Initializers @ [setup]} 13 | 14 | let withAddon (create : IGame -> 'addon) (param : GameParam) : GameParam = 15 | let create' = fun (game : IGame) -> 16 | create game :> IAddon 17 | {param with Initializers = param.Initializers @ [fun game -> game.Register create']} 18 | 19 | let withMask (rect : Rectangle) (color : Color) = 20 | withAddon <| Mask.Create rect color -------------------------------------------------------------------------------- /src/Game.Engine/Helper.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Engine.Helper 3 | 4 | open Dap.Prelude 5 | 6 | type IEntity with 7 | member this.GetChild (key : string) : IEntity = 8 | this.TryFindChild key 9 | |> Option.get 10 | member this.GetComponent<'comp when 'comp :> IComponent> () : 'comp = 11 | this.TryFindComponent<'comp> () 12 | |> Option.get 13 | 14 | type IGame with 15 | member this.GetAddon<'addon when 'addon :> IAddon> () : 'addon = 16 | this.TryFindAddon<'addon> () 17 | |> Option.get 18 | -------------------------------------------------------------------------------- /src/Game.Engine/Internal/Entity.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Engine.Internal.Entity 3 | 4 | open Dap.Prelude 5 | 6 | open Game.Engine 7 | open Transform 8 | 9 | type internal Entity (game : IGame, parent : IEntity option, key : string) = 10 | let mutable active : bool = true 11 | let transform = Transform2D () 12 | let mutable children : IEntity list = [] 13 | let mutable components : IComponent list = [] 14 | 15 | do ( 16 | parent 17 | |> Option.iter (fun p -> 18 | transform.Parent <- p.Transform 19 | ) 20 | ) 21 | interface IEntity with 22 | member __.Game = game 23 | member __.Path = 24 | parent 25 | |> Option.map (fun p -> sprintf "%s/%s" p.Path key) 26 | |> Option.defaultValue key 27 | member __.Key = key 28 | member __.Active 29 | with get () = active 30 | and set (a : bool) = active <- a 31 | member __.Parent = parent 32 | member __.Children = children 33 | member __.Transform = transform 34 | member __.Components = components 35 | member __.TryFindChild (key : string) : IEntity option = 36 | children 37 | |> List.tryFind (fun c -> c.Key = key) 38 | member __.TryFindComponent<'comp when 'comp :> IComponent> () : 'comp option = 39 | let t = typeof<'comp> 40 | components 41 | |> List.tryFind (fun c -> c.GetType () = t) 42 | |> Option.map (fun c -> c :?> 'comp) 43 | member this.AddChild (k : string) = 44 | let child = Entity (game, Some this.AsEntity, k) 45 | children <- children @ [child] 46 | child :> IEntity 47 | member __.AddComponent' (comp : IComponent) = 48 | components <- components @ [comp] 49 | member this.AddComponent (create : IEntity -> IComponent) = 50 | this.AsEntity.AddComponent' <| create this 51 | member __.Update () = 52 | if active then 53 | components 54 | |> List.iter (fun c -> 55 | if c.Enabled then 56 | c.Update () 57 | ) 58 | children 59 | |> List.iter (fun c -> 60 | if c.Active then 61 | c.Update () 62 | ) 63 | member __.Draw () = 64 | if active then 65 | components 66 | |> List.iter (fun c -> 67 | if c.Enabled then 68 | c.Draw () 69 | ) 70 | children 71 | |> List.iter (fun c -> 72 | if c.Active then 73 | c.Draw () 74 | ) 75 | member this.AsEntity = this :> IEntity -------------------------------------------------------------------------------- /src/Game.Engine/Internal/Game.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Engine.Internal.Game 3 | 4 | open Microsoft.Xna.Framework 5 | open Microsoft.Xna.Framework.Graphics 6 | open Microsoft.Xna.Framework.Input 7 | 8 | open TexturePackerLoader 9 | open Comora 10 | 11 | open Dap.Prelude 12 | open Game.Engine 13 | open Microsoft.Xna.Framework.Graphics 14 | 15 | type internal Game (param : GameParam) = 16 | inherit Microsoft.Xna.Framework.Game () 17 | let logger : ILogger = getLogger param.Name 18 | let mutable graphicsManager : GraphicsDeviceManager option = None 19 | let mutable graphics : Graphics option = None 20 | let mutable camera : Camera option = None 21 | let mutable atlas : SpriteSheet option = None 22 | let mutable time : GameTime = new GameTime() 23 | let mutable root : IEntity option = None 24 | let mutable addons : IAddon list = [] 25 | member this.Setup (contentRoot : string) = 26 | this.Content.RootDirectory <- contentRoot 27 | let graphics = new GraphicsDeviceManager (this) 28 | graphics.PreferredBackBufferWidth <- param.Width 29 | graphics.PreferredBackBufferHeight <- param.Height 30 | graphics.HardwareModeSwitch <- true 31 | graphics.ApplyChanges () 32 | graphicsManager <- Some graphics 33 | root <- Some (Entity (this.AsGame, None, "") :> IEntity) 34 | 35 | override this.Initialize () = 36 | let spriteBatch = new SpriteBatch (this.GraphicsDevice) 37 | let spriteSheetLoader = new SpriteSheetLoader(this.Content, this.GraphicsDevice) 38 | graphics <- Some { 39 | Device = this.GraphicsDevice 40 | SpriteBatch = spriteBatch 41 | SpriteRender = new SpriteRender (spriteBatch) 42 | SpriteSheetLoader = spriteSheetLoader 43 | } 44 | camera <- Some <| new Camera (this.GraphicsDevice) 45 | camera.Value.LoadContent () 46 | atlas <- Some <| spriteSheetLoader.Load (param.AtlasImage) 47 | base.IsMouseVisible <- param.IsMouseVisible 48 | base.Initialize () 49 | param.Initializers 50 | |> List.iter (fun initializer -> initializer this) 51 | override this.Update (gameTime : GameTime) = 52 | time <- gameTime 53 | param.ExitKey 54 | |> Option.iter (fun key -> 55 | if Keyboard.isKeyDown key then 56 | this.Exit () 57 | ) 58 | addons 59 | |> List.iter (fun addon -> addon.Update ()) 60 | root 61 | |> Option.iter (fun r -> r.Update ()) 62 | addons 63 | |> List.iter (fun addon -> addon.LateUpdate ()) 64 | base.Update (gameTime) 65 | override __.Draw (gameTime : GameTime) = 66 | time <- gameTime 67 | param.ClearColor 68 | |> Option.iter (fun color -> 69 | graphics.Value.Device.Clear (color) 70 | ) 71 | graphics.Value.Begin (camera.Value :> ICamera) 72 | addons 73 | |> List.iter (fun addon -> addon.Draw ()) 74 | root 75 | |> Option.iter (fun r -> r.Draw ()) 76 | addons 77 | |> List.iter (fun addon -> addon.LateDraw ()) 78 | graphics.Value.End () 79 | base.Draw (gameTime) 80 | interface IGame with 81 | member this.Xna = this :> Microsoft.Xna.Framework.Game 82 | member __.Param = param 83 | member __.Graphics = graphics |> Option.get 84 | member __.Camera = camera |> Option.get :> ICamera 85 | member __.Atlas = atlas |> Option.get 86 | member __.Time = time 87 | member __.Width = graphicsManager.Value.PreferredBackBufferWidth 88 | member __.Height = graphicsManager.Value.PreferredBackBufferHeight 89 | member __.Root = root |> Option.get 90 | member this.Reset () = 91 | root <- Some (Entity (this.AsGame, None, "") :> IEntity) 92 | member __.Addons = addons 93 | member __.TryFindAddon<'addon when 'addon :> IAddon> () : 'addon option = 94 | let t = typeof<'addon> 95 | addons 96 | |> List.tryFind (fun c -> c.GetType () = t) 97 | |> Option.map (fun c -> c :?> 'addon) 98 | member __.Register' (addon : IAddon) = 99 | addons <- addons @ [addon] 100 | member this.Register (create : IGame -> IAddon) = 101 | this.AsGame.Register' <| create this 102 | member __.Batch (?sortMode : SpriteSortMode) = 103 | graphics.Value.Batch (camera.Value :> ICamera, ?sortMode = sortMode) 104 | member this.AsGame = this :> IGame 105 | interface ILogger with 106 | member __.Log evt = logger.Log evt 107 | -------------------------------------------------------------------------------- /src/Game.Engine/Keyboard.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Engine.Keyboard 3 | 4 | open Microsoft.Xna.Framework.Input 5 | 6 | let isKeyDown (key : Keys) : bool = 7 | (Keyboard.GetState ()) .IsKeyDown (key) 8 | 9 | let isKeyUp (key : Keys) : bool = 10 | (Keyboard.GetState ()) .IsKeyUp (key) 11 | -------------------------------------------------------------------------------- /src/Game.Engine/Logging.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Engine.Logging 3 | 4 | open Dap.Prelude 5 | 6 | let private tplEntityDebug = LogEvent.Template4(LogLevelDebug, "[{Section}] {Info}: {Entity} {Detail}") 7 | 8 | let private tplEntityInfo = LogEvent.Template4(LogLevelInformation, "[{Section}] {Info}: {Entity} {Detail}") 9 | let private tplEntityWarn = LogEvent.Template4(LogLevelWarning, "[{Section}] {Warn}: {Entity} {Detail}") 10 | let private tplEntityError = LogEvent.Template4(LogLevelError, "[{Section}] {Err}: {Entity} {Detail}") 11 | 12 | let private tplEntityException = LogEvent.Template4WithException(LogLevelError, "[{Section}] {Err}: {Entity} {Detail}") 13 | 14 | let private tplComponentDebug = LogEvent.Template4(LogLevelDebug, "[{Section}] {Info}: {Component} {Detail}") 15 | 16 | let private tplComponentInfo = LogEvent.Template4(LogLevelInformation, "[{Section}] {Info}: {Component} {Detail}") 17 | let private tplComponentWarn = LogEvent.Template4(LogLevelWarning, "[{Section}] {Warn}: {Component} {Detail}") 18 | let private tplComponentError = LogEvent.Template4(LogLevelError, "[{Section}] {Err}: {Component} {Detail}") 19 | 20 | let private tplComponentException = LogEvent.Template4WithException(LogLevelError, "[{Section}] {Err}: {Component} {Detail}") 21 | 22 | let logEntityDebug (entity : IEntity) info detail : unit = 23 | entity.Game.Log <| tplEntityDebug entity.Path info entity detail 24 | 25 | let logEntityInfo (entity : IEntity) info detail : unit = 26 | entity.Game.Log <| tplEntityInfo entity.Path info entity detail 27 | 28 | let logEntityWarn (entity : IEntity) info detail : unit = 29 | entity.Game.Log <| tplEntityWarn entity.Path info entity detail 30 | 31 | let logEntityError (entity : IEntity) info detail : unit = 32 | entity.Game.Log <| tplEntityError entity.Path info entity detail 33 | 34 | let logEntityException (entity : IEntity) info detail e : unit = 35 | entity.Game.Log <| tplEntityException entity.Path info entity detail e 36 | 37 | let private getComponentSection (comp : IComponent) = 38 | sprintf "%s<%s>" comp.Entity.Path <| (comp.GetType ()).Name 39 | 40 | let logComponentDebug (comp : IComponent) info detail : unit = 41 | comp.Entity.Game.Log <| tplComponentDebug (getComponentSection comp) info comp detail 42 | 43 | let logComponentInfo (comp : IComponent) info detail : unit = 44 | comp.Entity.Game.Log <| tplComponentInfo (getComponentSection comp) info comp detail 45 | 46 | let logComponentWarn (comp : IComponent) info detail : unit = 47 | comp.Entity.Game.Log <| tplComponentWarn (getComponentSection comp) info comp detail 48 | 49 | let logComponentError (comp : IComponent) info detail : unit = 50 | comp.Entity.Game.Log <| tplComponentError (getComponentSection comp) info comp detail 51 | 52 | let logComponentException (comp : IComponent) info detail e : unit = 53 | comp.Entity.Game.Log <| tplComponentException (getComponentSection comp) info comp detail e 54 | 55 | -------------------------------------------------------------------------------- /src/Game.Engine/MathF.fs: -------------------------------------------------------------------------------- 1 | [] 2 | [] 3 | module Game.Engine.MathF 4 | 5 | (* 6 | System.MathF is currently only available in netcoreapp 7 | before it's added to NetStandard, use this as a wrapper 8 | *) 9 | 10 | open System 11 | 12 | open Transform 13 | 14 | let PI = float32 (Math.PI) 15 | 16 | let angleToRadian (a : float32) = 17 | a * PI / 180.0f 18 | 19 | let radianToAngle (r : float32) = 20 | r * 180.0f / PI 21 | 22 | type MathF = MathF with 23 | static member Sin (r : float32) = 24 | float32 (Math.Sin (float (r))) 25 | static member Cos (r : float32) = 26 | float32 (Math.Cos (float (r))) 27 | static member Tan (r : float32) = 28 | float32 (Math.Tan (float (r))) 29 | 30 | -------------------------------------------------------------------------------- /src/Game.Engine/RELEASE_NOTES.md: -------------------------------------------------------------------------------- 1 | ## 0.1.0 2 | * Very simple game engine in F# based on MonoGamme -------------------------------------------------------------------------------- /src/Game.Engine/Tile/Map.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Engine.Tile.Map 3 | 4 | open System.IO 5 | open TiledSharp 6 | open TexturePackerLoader 7 | 8 | open Dap.Prelude 9 | 10 | open Game.Engine 11 | open Game.Engine.Base 12 | open TiledSharp 13 | 14 | let private getTileSpriteName (tile : TmxTilesetTile) = 15 | Path.GetFileNameWithoutExtension (tile.Image.Source) 16 | 17 | let private loadSprites (entity : IEntity) (tiles : TmxTileset) = 18 | [ 19 | for kv in tiles.Tiles do 20 | let name = getTileSpriteName kv.Value 21 | let sprite = entity.Game.Atlas.Sprite name 22 | //logEntityWarn entity "Load_Sprite" (name, sprite) 23 | yield (kv.Key, sprite) 24 | ] |> Map.ofList 25 | 26 | type Map (map : TmxMap, entity : IEntity) = 27 | inherit Component (entity) 28 | //Note: hard coded with first tileset and first layer 29 | let tiles = map.Tilesets.[0] 30 | let layer = map.Layers.[0] 31 | let center = 32 | Vector2 ( 33 | float32 (map.TileWidth * map.Width / 2), 34 | float32 (map.TileHeight * map.Height / 2) 35 | ) 36 | let sprites : Map = loadSprites entity tiles 37 | override __.Draw () = 38 | let render = entity.Game.Graphics.SpriteRender 39 | for tile in layer.Tiles do 40 | let gid = tile.Gid 41 | if gid <> 0 then 42 | sprites 43 | |> Map.tryFind (gid - 1) 44 | |> Option.iter (fun sprite -> 45 | let x = float32 (tile.X * map.TileWidth) 46 | let y = float32 (tile.Y * map.TileHeight) 47 | render.Draw (sprite, Vector2(x, y) - center, Color.White) 48 | ) 49 | static member Create (map : TmxMap) (entity : IEntity) = 50 | Map (map, entity) 51 | :> IComponent 52 | -------------------------------------------------------------------------------- /src/Game.Engine/Types.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Engine.Types 3 | 4 | open System 5 | open Microsoft.Xna.Framework 6 | open Microsoft.Xna.Framework.Graphics 7 | open Microsoft.Xna.Framework.Input 8 | 9 | open TexturePackerLoader 10 | open Comora 11 | 12 | open Dap.Prelude 13 | open Microsoft.Xna.Framework.Graphics 14 | 15 | type Color = Microsoft.Xna.Framework.Color 16 | type Vector2 = Microsoft.Xna.Framework.Vector2 17 | type Rectangle = Microsoft.Xna.Framework.Rectangle 18 | 19 | type Transform2D = Transform.Transform2D 20 | 21 | type GamePad = Microsoft.Xna.Framework.Input.GamePad 22 | type Keyboard = Microsoft.Xna.Framework.Input.Keyboard 23 | type Keys = Microsoft.Xna.Framework.Input.Keys 24 | 25 | type ICamera = Comora.ICamera 26 | type Camera = Comora.Camera 27 | 28 | type Graphics = { 29 | Device : GraphicsDevice 30 | SpriteBatch : SpriteBatch 31 | SpriteRender : SpriteRender 32 | SpriteSheetLoader : SpriteSheetLoader 33 | } with 34 | member this.Begin (camera : ICamera, ?sortMode : SpriteSortMode) = 35 | let sortMode = defaultArg sortMode SpriteSortMode.Deferred 36 | this.SpriteBatch.Begin (camera, sortMode) 37 | member this.End () = 38 | this.SpriteBatch.End () 39 | member this.Batch (camera : ICamera, ?sortMode : SpriteSortMode) = 40 | this.End () 41 | this.Begin (camera, ?sortMode = sortMode); 42 | 43 | and IEntity = 44 | abstract Game : IGame with get 45 | abstract Path : string with get 46 | abstract Key : string with get 47 | abstract Active : bool with get, set 48 | abstract Parent : IEntity option with get 49 | abstract Children : IEntity list with get 50 | abstract Transform : Transform2D with get 51 | abstract Components : IComponent list with get 52 | abstract TryFindChild : string -> IEntity option 53 | abstract TryFindComponent<'comp when 'comp :> IComponent> : unit -> 'comp option 54 | abstract AddChild : string -> IEntity 55 | abstract AddComponent' : IComponent -> unit 56 | abstract AddComponent : (IEntity -> IComponent) -> unit 57 | abstract Update : unit -> unit 58 | abstract Draw : unit -> unit 59 | 60 | and IComponent = 61 | abstract Entity : IEntity with get 62 | abstract Enabled : bool with get, set 63 | abstract Update : unit -> unit 64 | abstract Draw : unit -> unit 65 | 66 | and IGame = 67 | inherit IDisposable 68 | inherit ILogger 69 | abstract Xna : Microsoft.Xna.Framework.Game with get 70 | abstract Param : GameParam with get 71 | abstract Graphics : Graphics with get 72 | abstract Camera : ICamera with get 73 | abstract Atlas : SpriteSheet with get 74 | abstract Time : GameTime with get 75 | abstract Width : int with get 76 | abstract Height : int with get 77 | abstract Root : IEntity with get 78 | abstract Reset : unit -> unit 79 | abstract Addons : IAddon list with get 80 | abstract TryFindAddon<'addon when 'addon :> IAddon> : unit -> 'addon option 81 | abstract Register' : IAddon -> unit 82 | abstract Register : (IGame -> IAddon) -> unit 83 | abstract Batch : ?sortMode : SpriteSortMode -> unit 84 | 85 | and IAddon = 86 | inherit ILogger 87 | abstract Game : IGame with get 88 | abstract Update : unit -> unit 89 | abstract Draw : unit -> unit 90 | abstract LateUpdate : unit -> unit 91 | abstract LateDraw : unit -> unit 92 | 93 | and GameParam = { 94 | Name : string 95 | Width : int 96 | Height : int 97 | AtlasImage : string 98 | IsMouseVisible : bool 99 | ClearColor : Color option 100 | ExitKey : Keys option 101 | Initializers : (IGame -> unit) list 102 | } with 103 | static member Create (name : string, atlasImage : string, ?width : int, ?height : int, ?isMouseVisible : bool, ?clearColor : Color, ?exitKey : Keys) : GameParam = 104 | { 105 | Name = name 106 | Width = defaultArg width 1280 107 | Height = defaultArg height 720 108 | AtlasImage = atlasImage 109 | IsMouseVisible = defaultArg isMouseVisible true 110 | ClearColor = clearColor 111 | ExitKey = exitKey 112 | Initializers = [] 113 | } 114 | -------------------------------------------------------------------------------- /src/Game.Engine/paket.references: -------------------------------------------------------------------------------- 1 | MonoGame.Framework.DesktopGL 2 | Comora 3 | TiledSharp 4 | 5 | Dap.Context 6 | -------------------------------------------------------------------------------- /src/Game.Gui/Builder/Base.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Gui.Builder.Base 3 | 4 | open System 5 | open Myra.Graphics2D.UI 6 | 7 | [] 8 | type WidgetBuilder<'widget when 'widget :> Widget> () = 9 | member this.Yield (_ : 'a) = this.Zero () 10 | abstract Zero : unit -> 'widget 11 | 12 | [] 13 | member __.Id (widget : 'widget, v : string) = 14 | widget.Id <- v 15 | widget 16 | [] 17 | member __.Left (widget : 'widget, v : int) = 18 | widget.Left <- v 19 | widget 20 | [] 21 | member __.Top (widget : 'widget, v : int) = 22 | widget.Top <- v 23 | widget 24 | [] 25 | member __.Width (widget : 'widget, v : int) = 26 | widget.Width <- Nullable v 27 | widget 28 | [] 29 | member __.Height (widget : 'widget, v : int) = 30 | widget.Height <- Nullable v 31 | widget 32 | [] 33 | member __.Pos (widget : 'widget, l : int, t : int) = 34 | widget.Left <- l 35 | widget.Top <- t 36 | widget 37 | [] 38 | member __.Size (widget : 'widget, w : int, h : int) = 39 | widget.Width <- Nullable w 40 | widget.Height <- Nullable h 41 | widget 42 | [] 43 | member __.Rect (widget : 'widget, l : int, t : int, w : int, h : int) = 44 | widget.Left <- l 45 | widget.Top <- t 46 | widget.Width <- Nullable w 47 | widget.Height <- Nullable h 48 | widget 49 | -------------------------------------------------------------------------------- /src/Game.Gui/Builder/Button.fs: -------------------------------------------------------------------------------- 1 | [] 2 | [] 3 | module Game.Gui.Builder.Button 4 | 5 | open System 6 | open Myra.Graphics2D.UI 7 | open System 8 | 9 | type TextButtonBuilder () = 10 | inherit WidgetBuilder () 11 | override __.Zero () = new TextButton () 12 | 13 | [] 14 | member __.Text (widget : TextButton, v : string) = 15 | widget.Text <- v 16 | widget 17 | [] 18 | member __.OnUp (widget : TextButton, onUp : EventArgs -> unit) = 19 | widget.TouchUp.Add onUp 20 | widget 21 | [] 22 | member __.OnDown (widget : TextButton, onDown : EventArgs -> unit) = 23 | widget.TouchDown.Add onDown 24 | widget 25 | -------------------------------------------------------------------------------- /src/Game.Gui/Builder/Helper.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Game.Gui.Builder.Helper 3 | 4 | let button = new TextButtonBuilder () 5 | let label = new LabelBuilder () 6 | 7 | let menuItem = new MenuItemBuilder () 8 | -------------------------------------------------------------------------------- /src/Game.Gui/Builder/MenuItem.fs: -------------------------------------------------------------------------------- 1 | [] 2 | [] 3 | module Game.Gui.Builder.MenuItem 4 | 5 | open System 6 | open Myra.Graphics2D.UI 7 | open System 8 | 9 | type MenuItemBuilder () = 10 | member this.Yield (_ : 'a) = this.Zero () 11 | member __.Zero () = new MenuItem () 12 | 13 | [] 14 | member __.Id (item : MenuItem, v : string) = 15 | item.Id <- v 16 | item 17 | [] 18 | member __.Text (item : MenuItem, v : string) = 19 | item.Text <- v 20 | item 21 | [] 22 | member __.OnSelected (item : MenuItem, onSelected : EventArgs -> unit) = 23 | item.Selected.Add onSelected 24 | item 25 | -------------------------------------------------------------------------------- /src/Game.Gui/Builder/Text.fs: -------------------------------------------------------------------------------- 1 | [] 2 | [] 3 | module Game.Gui.Builder.Text 4 | 5 | open System 6 | open Myra.Graphics2D.UI 7 | open System 8 | 9 | type LabelBuilder () = 10 | inherit WidgetBuilder