Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
trosnoth
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
3
Issues
3
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Games
trosnoth
Commits
810190b226c8
Commit
a6ab747d
authored
Mar 09, 2019
by
talljosh
Browse files
Options
Browse Files
Download
Plain Diff
Merging unstable into default with release of version 1.13.0
parents
c3706791ddde
79b403258284
Changes
258
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
258 changed files
with
11629 additions
and
10576 deletions
+11629
-10576
.hgtags
.hgtags
+2
-0
.idea/codeStyles/Project.xml
.idea/codeStyles/Project.xml
+29
-0
.idea/codeStyles/codeStyleConfig.xml
.idea/codeStyles/codeStyleConfig.xml
+5
-0
.idea/inspectionProfiles/Trosnoth_Default.xml
.idea/inspectionProfiles/Trosnoth_Default.xml
+1
-1
.idea/runConfigurations/Test_Trosnoth.xml
.idea/runConfigurations/Test_Trosnoth.xml
+15
-3
changes.txt
changes.txt
+33
-0
inkscape/trosnoth_export.py
inkscape/trosnoth_export.py
+4
-2
manage.py
manage.py
+3
-2
scripts/support
scripts/support
+17
-0
setup.py
setup.py
+25
-112
trosnoth.spec
trosnoth.spec
+64
-0
trosnoth/botprocess.py
trosnoth/botprocess.py
+298
-0
trosnoth/bots/base.py
trosnoth/bots/base.py
+81
-951
trosnoth/bots/goalsetter.py
trosnoth/bots/goalsetter.py
+32
-40
trosnoth/bots/orders.py
trosnoth/bots/orders.py
+105
-466
trosnoth/bots/pathfinding.py
trosnoth/bots/pathfinding.py
+3761
-1181
trosnoth/bots/pathtest.py
trosnoth/bots/pathtest.py
+69
-0
trosnoth/bots/ranger.py
trosnoth/bots/ranger.py
+2
-8
trosnoth/bots/terminator.py
trosnoth/bots/terminator.py
+3
-1
trosnoth/bots/test/test_bullet_avoidance.py
trosnoth/bots/test/test_bullet_avoidance.py
+0
-401
trosnoth/client3d/appsettings.py
trosnoth/client3d/appsettings.py
+2
-1
trosnoth/client3d/ingame/gameInterface.py
trosnoth/client3d/ingame/gameInterface.py
+10
-2
trosnoth/client3d/settings/settings.py
trosnoth/client3d/settings/settings.py
+4
-4
trosnoth/const.py
trosnoth/const.py
+16
-7
trosnoth/data/__init__.py
trosnoth/data/__init__.py
+2
-2
trosnoth/data/achievements/abandonEarly.png
trosnoth/data/achievements/abandonEarly.png
+0
-0
trosnoth/data/achievements/destroyStars.png
trosnoth/data/achievements/destroyStars.png
+0
-0
trosnoth/data/achievements/earnStars.png
trosnoth/data/achievements/earnStars.png
+0
-0
trosnoth/data/achievements/killEnemyWithStars.png
trosnoth/data/achievements/killEnemyWithStars.png
+0
-0
trosnoth/data/achievements/killedByNobody.png
trosnoth/data/achievements/killedByNobody.png
+0
-0
trosnoth/data/achievements/leaderadonal.png
trosnoth/data/achievements/leaderadonal.png
+0
-0
trosnoth/data/achievements/leaderdcatch.png
trosnoth/data/achievements/leaderdcatch.png
+0
-0
trosnoth/data/achievements/leaderdmenge.png
trosnoth/data/achievements/leaderdmenge.png
+0
-0
trosnoth/data/achievements/leaderjbartl.png
trosnoth/data/achievements/leaderjbartl.png
+0
-0
trosnoth/data/achievements/leaderjowen.png
trosnoth/data/achievements/leaderjowen.png
+0
-0
trosnoth/data/achievements/leaderjredmo.png
trosnoth/data/achievements/leaderjredmo.png
+0
-0
trosnoth/data/achievements/leaderkhethe.png
trosnoth/data/achievements/leaderkhethe.png
+0
-0
trosnoth/data/achievements/leaderkjohns.png
trosnoth/data/achievements/leaderkjohns.png
+0
-0
trosnoth/data/achievements/leaderlsharl.png
trosnoth/data/achievements/leaderlsharl.png
+0
-0
trosnoth/data/achievements/leadermbrand.png
trosnoth/data/achievements/leadermbrand.png
+0
-0
trosnoth/data/achievements/leadermwalla.png
trosnoth/data/achievements/leadermwalla.png
+0
-0
trosnoth/data/achievements/leadershorn.png
trosnoth/data/achievements/leadershorn.png
+0
-0
trosnoth/data/achievements/leadertirwin.png
trosnoth/data/achievements/leadertirwin.png
+0
-0
trosnoth/data/achievements/leadertryan.png
trosnoth/data/achievements/leadertryan.png
+0
-0
trosnoth/data/achievements/phaseShiftAbsorb.png
trosnoth/data/achievements/phaseShiftAbsorb.png
+0
-0
trosnoth/data/achievements/statScore.png
trosnoth/data/achievements/statScore.png
+0
-0
trosnoth/data/achievements/turretKill.png
trosnoth/data/achievements/turretKill.png
+0
-0
trosnoth/data/achievements/useStarsEfficiently.png
trosnoth/data/achievements/useStarsEfficiently.png
+0
-0
trosnoth/data/blocks/approvedBlocks.txt
trosnoth/data/blocks/approvedBlocks.txt
+0
-25
trosnoth/data/blocks/bckBlockedIslands.block
trosnoth/data/blocks/bckBlockedIslands.block
+1
-1
trosnoth/data/blocks/bckBlockedIslands.trosblock
trosnoth/data/blocks/bckBlockedIslands.trosblock
+1
-1
trosnoth/data/blocks/bckBlockedPlatforms.blockx
trosnoth/data/blocks/bckBlockedPlatforms.blockx
+0
-7
trosnoth/data/blocks/bckBlockedPlatforms.png
trosnoth/data/blocks/bckBlockedPlatforms.png
+0
-0
trosnoth/data/blocks/bckOpenEmpty.block
trosnoth/data/blocks/bckOpenEmpty.block
+1
-1
trosnoth/data/blocks/bckOpenEmpty.trosblock
trosnoth/data/blocks/bckOpenEmpty.trosblock
+1
-1
trosnoth/data/blocks/btmOpenCaverns.blockx
trosnoth/data/blocks/btmOpenCaverns.blockx
+0
-7
trosnoth/data/blocks/btmOpenCaverns.png
trosnoth/data/blocks/btmOpenCaverns.png
+0
-0
trosnoth/data/blocks/btmOpenCaves.block
trosnoth/data/blocks/btmOpenCaves.block
+0
-1
trosnoth/data/blocks/btmOpenCaves.trosblock
trosnoth/data/blocks/btmOpenCaves.trosblock
+0
-1
trosnoth/data/blocks/colour_templates.bmp
trosnoth/data/blocks/colour_templates.bmp
+0
-0
trosnoth/data/blocks/fwdOpenLadder.block
trosnoth/data/blocks/fwdOpenLadder.block
+1
-1
trosnoth/data/blocks/fwdOpenLadder.trosblock
trosnoth/data/blocks/fwdOpenLadder.trosblock
+1
-1
trosnoth/data/blocks/readme.txt
trosnoth/data/blocks/readme.txt
+0
-36
trosnoth/data/blocks/source/bckBlockedIslands.svg
trosnoth/data/blocks/source/bckBlockedIslands.svg
+467
-340
trosnoth/data/blocks/source/bckOpenEmpty.svg
trosnoth/data/blocks/source/bckOpenEmpty.svg
+108
-60
trosnoth/data/blocks/source/fwdOpenLadder.svg
trosnoth/data/blocks/source/fwdOpenLadder.svg
+211
-177
trosnoth/data/blocks/source/topOpenPokemon.svg
trosnoth/data/blocks/source/topOpenPokemon.svg
+473
-515
trosnoth/data/blocks/topBlockedSym1.blockx
trosnoth/data/blocks/topBlockedSym1.blockx
+0
-7
trosnoth/data/blocks/topBlockedSym1.png
trosnoth/data/blocks/topBlockedSym1.png
+0
-0
trosnoth/data/blocks/topOpen0.blockx
trosnoth/data/blocks/topOpen0.blockx
+0
-7
trosnoth/data/blocks/topOpen1.blockx
trosnoth/data/blocks/topOpen1.blockx
+0
-7
trosnoth/data/blocks/topOpen1.png
trosnoth/data/blocks/topOpen1.png
+0
-0
trosnoth/data/blocks/topOpen5.blockx
trosnoth/data/blocks/topOpen5.blockx
+0
-7
trosnoth/data/blocks/topOpen5.png
trosnoth/data/blocks/topOpen5.png
+0
-0
trosnoth/data/blocks/topOpen8.blockx
trosnoth/data/blocks/topOpen8.blockx
+0
-7
trosnoth/data/blocks/topOpen8.png
trosnoth/data/blocks/topOpen8.png
+0
-0
trosnoth/data/blocks/topOpenPokemon.block
trosnoth/data/blocks/topOpenPokemon.block
+1
-1
trosnoth/data/blocks/topOpenPokemon.trosblock
trosnoth/data/blocks/topOpenPokemon.trosblock
+1
-1
trosnoth/data/edges.db
trosnoth/data/edges.db
+0
-0
trosnoth/data/models/source/orb2.blend
trosnoth/data/models/source/orb2.blend
+0
-0
trosnoth/data/pathfinding.db
trosnoth/data/pathfinding.db
+0
-0
trosnoth/data/points.db
trosnoth/data/points.db
+0
-0
trosnoth/data/sprites/backbone.png
trosnoth/data/sprites/backbone.png
+0
-0
trosnoth/data/sprites/bigstar.png
trosnoth/data/sprites/bigstar.png
+0
-0
trosnoth/data/sprites/blocker-1.png
trosnoth/data/sprites/blocker-1.png
+0
-0
trosnoth/data/sprites/blocker-2.png
trosnoth/data/sprites/blocker-2.png
+0
-0
trosnoth/data/sprites/blue-bot.png
trosnoth/data/sprites/blue-bot.png
+0
-0
trosnoth/data/sprites/blue.png
trosnoth/data/sprites/blue.png
+0
-0
trosnoth/data/sprites/blueOrb.png
trosnoth/data/sprites/blueOrb.png
+0
-0
trosnoth/data/sprites/bomber-1.png
trosnoth/data/sprites/bomber-1.png
+0
-0
trosnoth/data/sprites/bomber-2.png
trosnoth/data/sprites/bomber-2.png
+0
-0
trosnoth/data/sprites/christmas.png
trosnoth/data/sprites/christmas.png
+0
-0
trosnoth/data/sprites/elephant.png
trosnoth/data/sprites/elephant.png
+0
-0
trosnoth/data/sprites/grenade.bmp
trosnoth/data/sprites/grenade.bmp
+0
-0
trosnoth/data/sprites/greyOrb.png
trosnoth/data/sprites/greyOrb.png
+0
-0
trosnoth/data/sprites/gun-0.png
trosnoth/data/sprites/gun-0.png
+0
-0
trosnoth/data/sprites/gun-1.png
trosnoth/data/sprites/gun-1.png
+0
-0
trosnoth/data/sprites/gun-2.png
trosnoth/data/sprites/gun-2.png
+0
-0
trosnoth/data/sprites/gun-3.png
trosnoth/data/sprites/gun-3.png
+0
-0
trosnoth/data/sprites/gun-4.png
trosnoth/data/sprites/gun-4.png
+0
-0
trosnoth/data/sprites/gun-5.png
trosnoth/data/sprites/gun-5.png
+0
-0
trosnoth/data/sprites/gun-6.png
trosnoth/data/sprites/gun-6.png
+0
-0
trosnoth/data/sprites/gun-7.png
trosnoth/data/sprites/gun-7.png
+0
-0
trosnoth/data/sprites/gun-8.png
trosnoth/data/sprites/gun-8.png
+0
-0
trosnoth/data/sprites/hold.png
trosnoth/data/sprites/hold.png
+0
-0
trosnoth/data/sprites/jamminghat-spark1.png
trosnoth/data/sprites/jamminghat-spark1.png
+0
-0
trosnoth/data/sprites/jamminghat-spark2.png
trosnoth/data/sprites/jamminghat-spark2.png
+0
-0
trosnoth/data/sprites/jamminghat-spark3.png
trosnoth/data/sprites/jamminghat-spark3.png
+0
-0
trosnoth/data/sprites/jamminghat.png
trosnoth/data/sprites/jamminghat.png
+0
-0
trosnoth/data/sprites/legs-r1.png
trosnoth/data/sprites/legs-r1.png
+0
-0
trosnoth/data/sprites/legs-r2.png
trosnoth/data/sprites/legs-r2.png
+0
-0
trosnoth/data/sprites/legs-r3.png
trosnoth/data/sprites/legs-r3.png
+0
-0
trosnoth/data/sprites/legs-r4.png
trosnoth/data/sprites/legs-r4.png
+0
-0
trosnoth/data/sprites/legs-s.png
trosnoth/data/sprites/legs-s.png
+0
-0
trosnoth/data/sprites/legs-w0.png
trosnoth/data/sprites/legs-w0.png
+0
-0
trosnoth/data/sprites/legs-w1.png
trosnoth/data/sprites/legs-w1.png
+0
-0
trosnoth/data/sprites/legs-w2.png
trosnoth/data/sprites/legs-w2.png
+0
-0
trosnoth/data/sprites/legs-w3.png
trosnoth/data/sprites/legs-w3.png
+0
-0
trosnoth/data/sprites/machinegun-0.png
trosnoth/data/sprites/machinegun-0.png
+0
-0
trosnoth/data/sprites/machinegun-1.png
trosnoth/data/sprites/machinegun-1.png
+0
-0
trosnoth/data/sprites/machinegun-2.png
trosnoth/data/sprites/machinegun-2.png
+0
-0
trosnoth/data/sprites/machinegun-3.png
trosnoth/data/sprites/machinegun-3.png
+0
-0
trosnoth/data/sprites/machinegun-4.png
trosnoth/data/sprites/machinegun-4.png
+0
-0
trosnoth/data/sprites/machinegun-5.png
trosnoth/data/sprites/machinegun-5.png
+0
-0
trosnoth/data/sprites/machinegun-6.png
trosnoth/data/sprites/machinegun-6.png
+0
-0
trosnoth/data/sprites/machinegun-7.png
trosnoth/data/sprites/machinegun-7.png
+0
-0
trosnoth/data/sprites/machinegun-8.png
trosnoth/data/sprites/machinegun-8.png
+0
-0
trosnoth/data/sprites/ninjahead.png
trosnoth/data/sprites/ninjahead.png
+0
-0
trosnoth/data/sprites/orbs-team.png
trosnoth/data/sprites/orbs-team.png
+0
-0
trosnoth/data/sprites/orbs.png
trosnoth/data/sprites/orbs.png
+0
-0
trosnoth/data/sprites/player.png
trosnoth/data/sprites/player.png
+0
-0
trosnoth/data/sprites/red-bot.png
trosnoth/data/sprites/red-bot.png
+0
-0
trosnoth/data/sprites/red.png
trosnoth/data/sprites/red.png
+0
-0
trosnoth/data/sprites/redOrb.png
trosnoth/data/sprites/redOrb.png
+0
-0
trosnoth/data/sprites/ricogun-0.png
trosnoth/data/sprites/ricogun-0.png
+0
-0
trosnoth/data/sprites/ricogun-1.png
trosnoth/data/sprites/ricogun-1.png
+0
-0
trosnoth/data/sprites/ricogun-2.png
trosnoth/data/sprites/ricogun-2.png
+0
-0
trosnoth/data/sprites/ricogun-3.png
trosnoth/data/sprites/ricogun-3.png
+0
-0
trosnoth/data/sprites/ricogun-4.png
trosnoth/data/sprites/ricogun-4.png
+0
-0
trosnoth/data/sprites/ricogun-5.png
trosnoth/data/sprites/ricogun-5.png
+0
-0
trosnoth/data/sprites/ricogun-6.png
trosnoth/data/sprites/ricogun-6.png
+0
-0
trosnoth/data/sprites/ricogun-7.png
trosnoth/data/sprites/ricogun-7.png
+0
-0
trosnoth/data/sprites/ricogun-8.png
trosnoth/data/sprites/ricogun-8.png
+0
-0
trosnoth/data/sprites/shoxgun-3.png
trosnoth/data/sprites/shoxgun-3.png
+0
-0
trosnoth/data/sprites/source/makesheet.py
trosnoth/data/sprites/source/makesheet.py
+32
-0
trosnoth/data/sprites/source/player.svg
trosnoth/data/sprites/source/player.svg
+4210
-2589
trosnoth/data/sprites/source/teamify.py
trosnoth/data/sprites/source/teamify.py
+45
-0
trosnoth/data/sprites/teamCHead.png
trosnoth/data/sprites/teamCHead.png
+0
-0
trosnoth/data/sprites/teamDHead.png
trosnoth/data/sprites/teamDHead.png
+0
-0
trosnoth/data/sprites/teamEHead.png
trosnoth/data/sprites/teamEHead.png
+0
-0
trosnoth/data/sprites/upgrade-phaseshift.png
trosnoth/data/sprites/upgrade-phaseshift.png
+0
-0
trosnoth/data/sprites/upgrade-turret.png
trosnoth/data/sprites/upgrade-turret.png
+0
-0
trosnoth/data/sprites/white-bot.png
trosnoth/data/sprites/white-bot.png
+0
-0
trosnoth/data/sprites/white.png
trosnoth/data/sprites/white.png
+0
-0
trosnoth/data/startupMenu/blackdrop.png
trosnoth/data/startupMenu/blackdrop.png
+0
-0
trosnoth/data/startupMenu/core.png
trosnoth/data/startupMenu/core.png
+0
-0
trosnoth/data/startupMenu/credits.txt
trosnoth/data/startupMenu/credits.txt
+2
-5
trosnoth/data/startupMenu/source/blackdrop.svg
trosnoth/data/startupMenu/source/blackdrop.svg
+167
-190
trosnoth/data/startupMenu/source/title.svg
trosnoth/data/startupMenu/source/title.svg
+137
-172
trosnoth/data/startupMenu/title.png
trosnoth/data/startupMenu/title.png
+0
-0
trosnoth/data/themes/pirate/blocks/fwdOpen1.png
trosnoth/data/themes/pirate/blocks/fwdOpen1.png
+0
-0
trosnoth/data/themes/pirate/blocks/source/inkscape_pasted_image_20100315_124925.png
...e/blocks/source/inkscape_pasted_image_20100315_124925.png
+0
-0
trosnoth/data/themes/pirate/blocks/source/inkscape_pasted_image_20100315_125004.png
...e/blocks/source/inkscape_pasted_image_20100315_125004.png
+0
-0
trosnoth/data/themes/pirate/blocks/source/inkscape_pasted_image_20100315_125122.png
...e/blocks/source/inkscape_pasted_image_20100315_125122.png
+0
-0
trosnoth/data/themes/pirate/blocks/source/inkscape_pasted_image_20100315_125224.png
...e/blocks/source/inkscape_pasted_image_20100315_125224.png
+0
-0
trosnoth/data/themes/pirate/blocks/source/topOpenSym0.svg
trosnoth/data/themes/pirate/blocks/source/topOpenSym0.svg
+0
-859
trosnoth/data/themes/pirate/blocks/topBlocked3.png
trosnoth/data/themes/pirate/blocks/topBlocked3.png
+0
-0
trosnoth/data/themes/pirate/blocks/topOpenSym0.png
trosnoth/data/themes/pirate/blocks/topOpenSym0.png
+0
-0
trosnoth/data/themes/pirate/config/colours.cfg
trosnoth/data/themes/pirate/config/colours.cfg
+0
-113
trosnoth/data/themes/pirate/config/fonts.cfg
trosnoth/data/themes/pirate/config/fonts.cfg
+0
-4
trosnoth/data/themes/pirate/fonts/RAPSCALL.TTF
trosnoth/data/themes/pirate/fonts/RAPSCALL.TTF
+0
-0
trosnoth/data/themes/pirate/fonts/licenses.txt
trosnoth/data/themes/pirate/fonts/licenses.txt
+0
-4
trosnoth/data/themes/pirate/info.txt
trosnoth/data/themes/pirate/info.txt
+0
-2
trosnoth/data/themes/pirate/sprites/Blue.png
trosnoth/data/themes/pirate/sprites/Blue.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-0.png
trosnoth/data/themes/pirate/sprites/Head-0.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-0b.png
trosnoth/data/themes/pirate/sprites/Head-0b.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-1.png
trosnoth/data/themes/pirate/sprites/Head-1.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-14.png
trosnoth/data/themes/pirate/sprites/Head-14.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-14b.png
trosnoth/data/themes/pirate/sprites/Head-14b.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-15.png
trosnoth/data/themes/pirate/sprites/Head-15.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-15b.png
trosnoth/data/themes/pirate/sprites/Head-15b.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-16.png
trosnoth/data/themes/pirate/sprites/Head-16.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-16b.png
trosnoth/data/themes/pirate/sprites/Head-16b.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-17.png
trosnoth/data/themes/pirate/sprites/Head-17.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-17b.png
trosnoth/data/themes/pirate/sprites/Head-17b.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-1b.png
trosnoth/data/themes/pirate/sprites/Head-1b.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-2.png
trosnoth/data/themes/pirate/sprites/Head-2.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-2b.png
trosnoth/data/themes/pirate/sprites/Head-2b.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-3.png
trosnoth/data/themes/pirate/sprites/Head-3.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-3b.png
trosnoth/data/themes/pirate/sprites/Head-3b.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-4.png
trosnoth/data/themes/pirate/sprites/Head-4.png
+0
-0
trosnoth/data/themes/pirate/sprites/Head-4b.png
trosnoth/data/themes/pirate/sprites/Head-4b.png
+0
-0
trosnoth/data/themes/pirate/sprites/Hold-1.png
trosnoth/data/themes/pirate/sprites/Hold-1.png
+0
-0
trosnoth/data/themes/pirate/sprites/Hold-1b.png
trosnoth/data/themes/pirate/sprites/Hold-1b.png
+0
-0
trosnoth/data/themes/pirate/sprites/Red.png
trosnoth/data/themes/pirate/sprites/Red.png
+0
-0
trosnoth/data/themes/pirate/sprites/blueOrb.png
trosnoth/data/themes/pirate/sprites/blueOrb.png
+0
-0
trosnoth/data/themes/pirate/sprites/blueShot.bmp
trosnoth/data/themes/pirate/sprites/blueShot.bmp
+0
-0
trosnoth/data/themes/pirate/sprites/grenade.bmp
trosnoth/data/themes/pirate/sprites/grenade.bmp
+0
-0
trosnoth/data/themes/pirate/sprites/greyOrb.png
trosnoth/data/themes/pirate/sprites/greyOrb.png
+0
-0
trosnoth/data/themes/pirate/sprites/redOrb.png
trosnoth/data/themes/pirate/sprites/redOrb.png
+0
-0
trosnoth/data/themes/pirate/sprites/redShot.bmp
trosnoth/data/themes/pirate/sprites/redShot.bmp
+0
-0
trosnoth/data/themes/pirate/sprites/smallstar.png
trosnoth/data/themes/pirate/sprites/smallstar.png
+0
-0
trosnoth/data/themes/pirate/sprites/star.png
trosnoth/data/themes/pirate/sprites/star.png
+0
-0
trosnoth/data/themes/pirate/startupMenu/blackdrop.png
trosnoth/data/themes/pirate/startupMenu/blackdrop.png
+0
-0
trosnoth/djangoapp/migrations/0024_auto_20190208_0423.py
trosnoth/djangoapp/migrations/0024_auto_20190208_0423.py
+18
-0
trosnoth/djangoapp/migrations/0025_trosnotharena_profileslowcalls.py
...angoapp/migrations/0025_trosnotharena_profileslowcalls.py
+18
-0
trosnoth/djangoapp/models.py
trosnoth/djangoapp/models.py
+5
-0
trosnoth/game.py
trosnoth/game.py
+33
-14
trosnoth/gamerecording/achievementlist.py
trosnoth/gamerecording/achievementlist.py
+0
-24
trosnoth/keymap.py
trosnoth/keymap.py
+2
-1
trosnoth/levels/base.py
trosnoth/levels/base.py
+66
-4
trosnoth/levels/trigger_demo.py
trosnoth/levels/trigger_demo.py
+2
-2
trosnoth/levels/trosball.py
trosnoth/levels/trosball.py
+0
-1
trosnoth/levels/tutorial.py
trosnoth/levels/tutorial.py
+10
-6
trosnoth/messages/__init__.py
trosnoth/messages/__init__.py
+2
-2
trosnoth/messages/gameplay.py
trosnoth/messages/gameplay.py
+56
-7
trosnoth/messages/setup.py
trosnoth/messages/setup.py
+19
-5
trosnoth/model/agent.py
trosnoth/model/agent.py
+38
-9
trosnoth/model/agenthub.py
trosnoth/model/agenthub.py
+22
-10
trosnoth/model/coin.py
trosnoth/model/coin.py
+1
-3
trosnoth/model/map.py
trosnoth/model/map.py
+10
-1
trosnoth/model/mapLayout.py
trosnoth/model/mapLayout.py
+39
-100
trosnoth/model/mapblocks.py
trosnoth/model/mapblocks.py
+8
-150
trosnoth/model/modes.py
trosnoth/model/modes.py
+4
-17
trosnoth/model/obstacles.py
trosnoth/model/obstacles.py
+0
-674
trosnoth/model/physics.py
trosnoth/model/physics.py
+18
-76
trosnoth/model/player.py
trosnoth/model/player.py
+303
-649
trosnoth/model/shot.py
trosnoth/model/shot.py
+3
-10
trosnoth/model/test/test_physics.py
trosnoth/model/test/test_physics.py
+96
-0
trosnoth/model/test/test_player.py
trosnoth/model/test/test_player.py
+18
-0
trosnoth/model/trosball.py
trosnoth/model/trosball.py
+0
-3
trosnoth/model/unit.py
trosnoth/model/unit.py
+1
-16
trosnoth/model/universe.py
trosnoth/model/universe.py
+18
-37
trosnoth/model/voteArbiter.py
trosnoth/model/voteArbiter.py
+4
-12
trosnoth/network/client.py
trosnoth/network/client.py
+3
-1
trosnoth/network/networkDefines.py
trosnoth/network/networkDefines.py
+1
-1
trosnoth/network/server.py
trosnoth/network/server.py
+8
-3
trosnoth/run/authserver.py
trosnoth/run/authserver.py
+3
-3
trosnoth/run/solotest.py
trosnoth/run/solotest.py
+1
-0
trosnoth/server/arena.py
trosnoth/server/arena.py
+12
-1
trosnoth/server/settings.py
trosnoth/server/settings.py
+2
-2
trosnoth/themes.py
trosnoth/themes.py
+42
-116
trosnoth/triggers/bots.py
trosnoth/triggers/bots.py
+1
-2
trosnoth/triggers/deathmatch.py
trosnoth/triggers/deathmatch.py
+13
-13
trosnoth/triggers/elephant.py
trosnoth/triggers/elephant.py
+4
-4
trosnoth/trosnothgui/ingame/detailsInterface.py
trosnoth/trosnothgui/ingame/detailsInterface.py
+13
-4
trosnoth/trosnothgui/ingame/gamevote.py
trosnoth/trosnothgui/ingame/gamevote.py
+2
-7
trosnoth/trosnothgui/ingame/mainMenu.py
trosnoth/trosnothgui/ingame/mainMenu.py
+3
-1
trosnoth/trosnothgui/ingame/sprites.py
trosnoth/trosnothgui/ingame/sprites.py
+84
-180
trosnoth/trosnothgui/ingame/universegui.py
trosnoth/trosnothgui/ingame/universegui.py
+3
-0
trosnoth/trosnothgui/ingame/viewManager.py
trosnoth/trosnothgui/ingame/viewManager.py
+139
-34
trosnoth/trosnothgui/settings/keymap.py
trosnoth/trosnothgui/settings/keymap.py
+9
-8
trosnoth/utils/globaldebug.py
trosnoth/utils/globaldebug.py
+0
-3
trosnoth/utils/math.py
trosnoth/utils/math.py
+0
-14
trosnoth/utils/twistdebug.py
trosnoth/utils/twistdebug.py
+5
-5
trosnoth/utils/utils.py
trosnoth/utils/utils.py
+3
-2
trosnoth/version.py
trosnoth/version.py
+1
-1
wininstall/buildInstallScript.py
wininstall/buildInstallScript.py
+20
-4
No files found.
.hgtags
View file @
810190b226c8
...
...
@@ -26,3 +26,5 @@ fd85c1d4bfa43e9c420cd412779388392732a092 release-1.13.0a1
3944abe8e4226bf52b639c4c730d5fcbde491a51 release-1.13.0a3
ee487c6c10187577b9ba2691c1f6a1f711e71c6c release-1.13.0a4
3c1d273627c53ca9d1fc12618a1efc24c96c6d93 release-1.13.0a5
58de941ed00367ff4b956b0b895ca6d30bc7ff60 release-1.13.0b1
34d9db97cce00854d7e9fa8905fabf5e955e7d86 release-1.13.0b2
.idea/codeStyles/Project.xml
0 → 100644
View file @
810190b226c8
<component
name=
"ProjectCodeStyleConfiguration"
>
<code_scheme
name=
"Project"
version=
"173"
>
<option
name=
"RIGHT_MARGIN"
value=
"79"
/>
<option
name=
"WRAP_WHEN_TYPING_REACHES_RIGHT_MARGIN"
value=
"true"
/>
<Python>
<option
name=
"ALIGN_COLLECTIONS_AND_COMPREHENSIONS"
value=
"false"
/>
<option
name=
"ALIGN_MULTILINE_IMPORTS"
value=
"false"
/>
<option
name=
"NEW_LINE_AFTER_COLON"
value=
"true"
/>
<option
name=
"DICT_NEW_LINE_AFTER_LEFT_BRACE"
value=
"true"
/>
<option
name=
"DICT_NEW_LINE_BEFORE_RIGHT_BRACE"
value=
"true"
/>
<option
name=
"OPTIMIZE_IMPORTS_JOIN_FROM_IMPORTS_WITH_SAME_SOURCE"
value=
"true"
/>
<option
name=
"FROM_IMPORT_NEW_LINE_AFTER_LEFT_PARENTHESIS"
value=
"true"
/>
<option
name=
"FROM_IMPORT_NEW_LINE_BEFORE_RIGHT_PARENTHESIS"
value=
"true"
/>
<option
name=
"FROM_IMPORT_PARENTHESES_FORCE_IF_MULTILINE"
value=
"true"
/>
<option
name=
"FROM_IMPORT_TRAILING_COMMA_IF_MULTILINE"
value=
"true"
/>
</Python>
<codeStyleSettings
language=
"HTML"
>
<indentOptions>
<option
name=
"INDENT_SIZE"
value=
"2"
/>
<option
name=
"CONTINUATION_INDENT_SIZE"
value=
"4"
/>
<option
name=
"TAB_SIZE"
value=
"2"
/>
</indentOptions>
</codeStyleSettings>
<codeStyleSettings
language=
"Python"
>
<option
name=
"ALIGN_MULTILINE_PARAMETERS"
value=
"false"
/>
<option
name=
"ALIGN_MULTILINE_PARAMETERS_IN_CALLS"
value=
"false"
/>
</codeStyleSettings>
</code_scheme>
</component>
\ No newline at end of file
.idea/codeStyles/codeStyleConfig.xml
0 → 100644
View file @
810190b226c8
<component
name=
"ProjectCodeStyleConfiguration"
>
<state>
<option
name=
"USE_PER_PROJECT_SETTINGS"
value=
"true"
/>
</state>
</component>
\ No newline at end of file
.idea/inspectionProfiles/Trosnoth_Default.xml
View file @
810190b226c8
...
...
@@ -5,7 +5,7 @@
<inspection_tool
class=
"PyArgumentListInspection"
enabled=
"false"
level=
"WARNING"
enabled_by_default=
"false"
/>
<inspection_tool
class=
"PyAugmentAssignmentInspection"
enabled=
"false"
level=
"WEAK WARNING"
enabled_by_default=
"false"
/>
<inspection_tool
class=
"PyBroadExceptionInspection"
enabled=
"false"
level=
"WEAK WARNING"
enabled_by_default=
"false"
/>
<inspection_tool
class=
"PyCompatibilityInspection"
enabled=
"
true"
level=
"WARNING"
enabled_by_default=
"tru
e"
>
<inspection_tool
class=
"PyCompatibilityInspection"
enabled=
"
false"
level=
"WARNING"
enabled_by_default=
"fals
e"
>
<option
name=
"ourVersions"
>
<value>
<list
size=
"1"
>
...
...
.idea/runConfigurations/Test_Trosnoth.xml
View file @
810190b226c8
<component
name=
"ProjectRunConfigurationManager"
>
<configuration
default=
"false"
name=
"Test Trosnoth"
type=
"tests"
factoryName=
"py.test"
>
<module
name=
"trosnoth"
/>
<option
name=
"INTERPRETER_OPTIONS"
value=
""
/>
<option
name=
"PARENT_ENVS"
value=
"true"
/>
<envs
/>
<option
name=
"SDK_HOME"
value=
"/usr/bin/python2.7"
/>
<option
name=
"WORKING_DIRECTORY"
value=
""
/>
<option
name=
"IS_MODULE_SDK"
value=
"false"
/>
<option
name=
"ADD_CONTENT_ROOTS"
value=
"true"
/>
<option
name=
"ADD_SOURCE_ROOTS"
value=
"true"
/>
<module
name=
"trosnoth"
/>
<option
name=
"SCRIPT_NAME"
value=
""
/>
<option
name=
"CLASS_NAME"
value=
""
/>
<option
name=
"METHOD_NAME"
value=
""
/>
...
...
@@ -21,6 +20,19 @@
<option
name=
"params"
value=
""
/>
<option
name=
"USE_PARAM"
value=
"false"
/>
<option
name=
"USE_KEYWORD"
value=
"false"
/>
<method
/>
<module
name=
"trosnoth"
/>
<option
name=
"INTERPRETER_OPTIONS"
value=
""
/>
<option
name=
"PARENT_ENVS"
value=
"true"
/>
<option
name=
"SDK_HOME"
value=
""
/>
<option
name=
"WORKING_DIRECTORY"
value=
""
/>
<option
name=
"IS_MODULE_SDK"
value=
"true"
/>
<option
name=
"ADD_CONTENT_ROOTS"
value=
"true"
/>
<option
name=
"ADD_SOURCE_ROOTS"
value=
"true"
/>
<option
name=
"_new_keywords"
value=
""""
/>
<option
name=
"_new_additionalArguments"
value=
""""
/>
<option
name=
"_new_legacyInformationCopiedToNew"
value=
"true"
/>
<option
name=
"_new_target"
value=
""$PROJECT_DIR$/trosnoth""
/>
<option
name=
"_new_targetType"
value=
""PATH""
/>
<method
v=
"2"
/>
</configuration>
</component>
\ No newline at end of file
changes.txt
View file @
810190b226c8
v1.13.0
* Rewrote collision detection system to use separating axis theorem. This
eliminates the possibility of falling through walls.
* Improved grappling hook---you can now swing on it, and it has a nicer feel.
* Grappling hook is now the default action for right mouse button.
* Overhauled bot pathfinding so that bots can use momentum-based physics and grappling hook.
* Removed some map sections which were hard to get around and simplified others.
* Players can now hold on to the roof, and shoot while holding the walls or roof.
* Orbs now spin.
* Added taunts / emotes.
* Using trajectory assistance while a ghost now shows trajectory for firing as soon as player respawns.
* When using ninja, added a radial indicator around orbs to show how close player can get before coming visible.
* Increased player terminal velocity, and grenade velocity.
* Windows EXE and installer are now signed, thanks to pygame.org artist in residence grant money.
* Added server support for grouping matches together into tournaments and showing some aggregated statistics and leader boards.
* Moved some server command-line options to database or configuration file.
* Moved some insecure hard-coded server settings into configuration file.
* Server now opens web interface as admin user unless run with --no-browser command-line option.
* Server now runs bots in a separate process to improve server responsiveness.
* Made minor improvements to server web interface.
* Trosball no longer starts inside a wall.
* Trosball games can no longer go on forever.
* Fixed Trosball bug where front line no longer appeared to be moving with the ball.
* Fixed bug where topmost zones would show upwards indicator lights.
* Fixed bug in server record of player zone scores.
* Fixed traceback triggered in observer/replay mode when viewing an invisible player.
* Made Trosnoth still work on display systems with odd bit depths.
* Trosnoth now works on machines with no sound subsystem.
* Fixed bug where, when run with some builds of pygame, music would stop after the first piece.
* Migrated codebase to Python 3 and Django 2.
* Removed murmur/mumble integration as nobody is using it.
* Removed some unused code.
v1.12.2
* Added a finite, slightly random reaction time for bots when they try to shoot.
* Friendly players are now shown as a short name on the minimap instead of a
...
...
inkscape/trosnoth_export.py
View file @
810190b226c8
...
...
@@ -446,11 +446,13 @@ def isSymmetrical(obstacles):
def
warning
(
message
):
print
(
'WARNING: '
+
message
,
file
=
sys
.
stderr
)
sys
.
stderr
.
write
(
'WARNING: '
+
message
)
sys
.
stderr
.
flush
()
def
error
(
message
):
print
(
'ERROR: '
+
message
,
file
=
sys
.
stderr
)
sys
.
stderr
.
write
(
'ERROR: '
+
message
)
sys
.
stderr
.
flush
()
sys
.
exit
(
1
)
...
...
manage.py
View file @
810190b226c8
...
...
@@ -3,8 +3,9 @@ import os
import
sys
if
__name__
==
"__main__"
:
# Make sure that this version of trosnoth is run.
sys
.
path
.
insert
(
0
,
os
.
path
.
abspath
(
os
.
path
.
dirname
(
__file__
)))
if
not
getattr
(
sys
,
'frozen'
,
False
):
# Make sure that this version of trosnoth is run.
sys
.
path
.
insert
(
0
,
os
.
path
.
abspath
(
os
.
path
.
dirname
(
__file__
)))
os
.
environ
.
setdefault
(
"DJANGO_SETTINGS_MODULE"
,
"trosnoth.server.settings"
)
...
...
scripts/support
0 → 100644
View file @
810190b226c8
#!/usr/bin/python3
import
sys
if
sys
.
argv
[
1
:]
and
sys
.
argv
[
1
]
==
'arena'
:
from
trosnoth.server.arena
import
main
sys
.
argv
[:
2
]
=
[
' '
.
join
(
sys
.
argv
[:
2
])]
main
()
elif
sys
.
argv
[
1
:]
and
sys
.
argv
[
1
]
==
'bots'
:
from
trosnoth.botprocess
import
main
sys
.
argv
[:
2
]
=
[
' '
.
join
(
sys
.
argv
[:
2
])]
main
()
else
:
print
(
'This is an internal support program for Trosnoth server.'
)
print
(
'It is not designed to be run directly.'
)
sys
.
exit
(
1
)
\ No newline at end of file
setup.py
View file @
810190b226c8
import
imp
import
os.path
import
sys
from
setuptools
import
setup
,
find_packages
from
setuptools
import
find_packages
,
setup
here
=
os
.
path
.
abspath
(
os
.
path
.
dirname
(
__file__
))
trosnoth_version
=
imp
.
load_source
(
'trosnoth.version'
,
os
.
path
.
join
(
here
,
'trosnoth'
,
'version.py'
)).
version
def
main
():
global
trosnoth_version
if
'py2exe'
in
sys
.
argv
:
import
py2exe
# Make sure py2exe knows which data files to include.
paths
=
[
'trosnoth/data'
,
'trosnoth/data/achievements'
,
'trosnoth/data/blocks'
,
'trosnoth/data/blocks/custom'
,
'trosnoth/data/config'
,
'trosnoth/data/fonts'
,
'trosnoth/data/music'
,
'trosnoth/data/sound'
,
'trosnoth/data/sprites'
,
'trosnoth/data/startupMenu'
,
'trosnoth/data/statGeneration'
,
'trosnoth/data/themes'
,
'trosnoth/data/themes/pirate'
,
'trosnoth/data/themes/pirate/blocks'
,
'trosnoth/data/themes/pirate/config'
,
'trosnoth/data/themes/pirate/fonts'
,
'trosnoth/data/themes/pirate/sprites'
,
'trosnoth/data/themes/pirate/startupMenu'
,
'trosnoth/data/web'
,
]
data
=
[]
for
path
in
paths
:
files
=
[]
for
filename
in
os
.
listdir
(
path
):
if
filename
in
(
'__init__.py'
,
'__init__.pyc'
):
continue
fn
=
os
.
path
.
join
(
path
,
filename
)
if
os
.
path
.
isfile
(
fn
):
files
.
append
(
fn
)
data
.
append
((
path
,
files
))
moreargs
=
{
'console'
:
[
{
'script'
:
'scripts/trosnoth'
,
'icon_resources'
:
[(
1
,
'wininstall/icon.ico'
)]
},
'scripts/trosnoth-server'
,
],
'data_files'
:
data
,
'options'
:
{
'py2exe'
:
{
'includes'
:
'zope.interface,pygame._view,trosnoth.bots.john,trosnoth.bots.ranger,trosnoth.bots.balance,trosnoth.bots.sirrobin,trosnoth.bots.puppet,trosnoth.bots.onezone'
,
},
},
}
elif
sys
.
argv
[
1
]
==
'windows'
:
sys
.
argv
[
1
]
=
'build'
PYTHON_INSTALL_DIR
=
os
.
path
.
dirname
(
os
.
path
.
dirname
(
os
.
__file__
))
os
.
environ
[
'TCL_LIBRARY'
]
=
os
.
path
.
join
(
PYTHON_INSTALL_DIR
,
'tcl'
,
'tcl8.6'
)
os
.
environ
[
'TK_LIBRARY'
]
=
os
.
path
.
join
(
PYTHON_INSTALL_DIR
,
'tcl'
,
'tk8.6'
)
from
cx_Freeze
import
setup
,
Executable
moreargs
=
{
'executables'
:
[
Executable
(
'scripts/trosnoth'
,
icon
=
'wininstall/icon.ico'
),
],
'build_exe'
:
{
'include_files'
:
[
os
.
path
.
join
(
PYTHON_INSTALL_DIR
,
'DLLs'
,
'tk86t.dll'
),
os
.
path
.
join
(
PYTHON_INSTALL_DIR
,
'DLLs'
,
'tcl86t.dll'
),
],
'include_msvcr'
:
True
,
'namespace_packages'
:
[
'zope'
],
'zip_excludes_package'
:
'*'
,
},
}
# Windows doesn't like things like 'a1' at the end
if
any
(
c
.
isalpha
()
for
c
in
trosnoth_version
):
trosnoth_version
=
trosnoth_version
.
replace
(
'rc'
,
'.'
).
replace
(
'a'
,
'.'
).
replace
(
'b'
,
'.'
)
else
:
moreargs
=
{}
if
__name__
==
'__main__'
:
setup
(
name
=
'trosnoth'
,
version
=
trosnoth_version
,
description
=
'Trosnoth network platform game'
,
...
...
@@ -98,28 +16,27 @@ def main():
author_email
=
'josh@trosnoth.org'
,
url
=
'http://www.trosnoth.org/'
,
packages
=
find_packages
(
exclude
=
[
'test'
]),
# Mapping says which files each package needs.
package_data
=
{
'trosnoth.data.blocks'
:
[
'*.block'
,
'*.png'
,
'*.bmp'
,
'*.trosblock'
],
'trosnoth.data.fonts'
:
[
'*.ttf'
,
'*.TTF'
,
'*.txt'
],
'trosnoth.data.music'
:
[
'*.ogg'
],
'trosnoth.data.sound'
:
[
'*.ogg'
],
'trosnoth.data.sprites'
:
[
'*.png'
,
'*.bmp'
],
'trosnoth.data.startupMenu'
:
[
'*.png'
,
'*.txt'
],
'trosnoth.data.statGeneration'
:
[
'*.htm'
],
'trosnoth.data.themes'
:
[
'pirate/info.txt'
,
'pirate/blocks/*.png'
,
'pirate/config/*.cfg'
,
'pirate/fonts/*'
,
'pirate/sprites/*'
,
'pirate/startupMenu/*'
],
'trosnoth.data'
:
[
'config/*.cfg'
,
'achievements/*.png'
,
'web/*.png'
,
'pathfinding.db'
,
'config/*.prc'
],
'trosnoth'
:
[
'gpl.txt'
]
},
package_data
=
{
'trosnoth'
:
[
'data/blocks/*.block'
,
'data/blocks/*.trosblock'
,
'data/config/*.cfg'
,
'data/fonts/*.ttf'
,
'data/fonts/*.TTF'
,
'data/fonts/*.txt'
,
'data/music/*.ogg'
,
'data/sound/*.ogg'
,
'data/sprites/*.png'
,
'data/startupMenu/*.png'
,
'data/startupMenu/*.txt'
,
'data/statGeneration/*.htm'
,
'data/achievements/*.png'
,
'data/web/*.png'
,
'data/*.db'
,
'gpl.txt'
,
]},
scripts
=
[
'scripts/trosnoth'
,
'scripts/trosnoth-server'
],
long_description
=
'Trosnoth is a
very very addictive and fun network tea
m game.'
,
long_description
=
'Trosnoth is a
fast-paced open source territory control team platfor
m game.'
,
install_requires
=
[
'pygame'
,
...
...
@@ -137,14 +54,10 @@ def main():
'Natural Language :: English'
,
'Operating System :: OS Independent'
,
'Programming Language :: Python'
,
'Programming Language :: Python :: 2'
,
'Programming Language :: Python :: 2.7'
,
'Programming Language :: Python :: 3'
,
'Programming Language :: Python :: 3.5'
,
'Programming Language :: Python :: 3.6'
,
'Topic :: Games/Entertainment :: Arcade'
,
'Topic :: Games/Entertainment :: Side-Scrolling/Arcade Games'
,
],
**
moreargs
)
if
__name__
==
'__main__'
:
main
()
)
trosnoth.spec
0 → 100644
View file @
810190b226c8
# -*- mode: python -*-
import
os
block_cipher
=
None
base_dir
=
os
.
path
.
abspath
(
'.'
)
a
=
Analysis
(
[
'scripts
\\
trosnoth'
],
pathex
=
[
base_dir
],
binaries
=
[],
datas
=
[
(
'trosnoth/data/blocks/*.block'
,
'trosnoth/data/blocks'
),
(
'trosnoth/data/blocks/*.trosblock'
,
'trosnoth/data/blocks'
),
(
'trosnoth/data/config/*.cfg'
,
'trosnoth/data/config'
),
(
'trosnoth/data/fonts/*.ttf'
,
'trosnoth/data/fonts'
),
(
'trosnoth/data/fonts/*.txt'
,
'trosnoth/data/fonts'
),
(
'trosnoth/data/music/*.ogg'
,
'trosnoth/data/music'
),
(
'trosnoth/data/sound/*.ogg'
,
'trosnoth/data/sound'
),
(
'trosnoth/data/sprites/*.png'
,
'trosnoth/data/sprites'
),
(
'trosnoth/data/startupMenu/*.png'
,
'trosnoth/data/startupMenu'
),
(
'trosnoth/data/startupMenu/*.txt'
,
'trosnoth/data/startupMenu'
),
(
'trosnoth/data/statGeneration/*.htm'
,
'trosnoth/data/statGeneration'
),
(
'trosnoth/data/achievements/*.png'
,
'trosnoth/data/achievements'
),
(
'trosnoth/data/web/*.png'
,
'trosnoth/data/web'
),
(
'trosnoth/data/*.db'
,
'trosnoth/data'
),
(
'trosnoth/gpl.txt'
,
'trosnoth'
),
],
hiddenimports
=
[],
hookspath
=
[],
runtime_hooks
=
[],
excludes
=
[
'django'
],
win_no_prefer_redirects
=
False
,
win_private_assemblies
=
False
,
cipher
=
block_cipher
,
noarchive
=
False
,
)
pyz
=
PYZ
(
a
.
pure
,
a
.
zipped_data
,
cipher
=
block_cipher
)
exe
=
EXE
(
pyz
,
a
.
scripts
,
[],
exclude_binaries
=
True
,
name
=
'trosnoth'
,
debug
=
False
,
bootloader_ignore_signals
=
False
,
strip
=
False
,
upx
=
True
,
console
=
False
,
icon
=
'wininstall/icon.ico'
,
)
coll
=
COLLECT
(
exe
,
a
.
binaries
,
a
.
zipfiles
,
a
.
datas
,
strip
=
False
,
upx
=
True
,
name
=
'trosnoth'
)
trosnoth/botprocess.py
0 → 100644
View file @
810190b226c8
#!/usr/bin/env python3
if
__name__
==
'__main__'
:
# Make sure that this version of trosnoth is run.
import
os
import
sys
sys
.
path
.
insert
(
0
,
os
.
path
.
join
(
os
.
path
.
abspath
(
os
.
path
.
dirname
(
__file__
)),
'..'
))
import
argparse
import
logging
import
os
import
sys
import
uuid
from
twisted.internet
import
defer
,
reactor
from
twisted.internet.endpoints
import
TCP4ServerEndpoint
from
twisted.internet.protocol
import
ProcessProtocol
,
Factory
,
ClientCreator
from
twisted.protocols
import
amp
from
trosnoth.game
import
RemoteGame
from
trosnoth.model.mapLayout
import
LayoutDatabase
from
trosnoth.model.universe_base
import
NEUTRAL_TEAM_ID
from
trosnoth.network.client
import
TrosnothClientProtocol
from
trosnoth.network.server
import
TrosnothServerFactory
from
trosnoth.utils.event
import
Event
from
trosnoth.utils.utils
import
initLogging
log
=
logging
.
getLogger
(
__name__
)
LOCALHOST
=
'127.0.0.1'
class
ServerSideBotProcessManager
:
def
__init__
(
self
,
game
,
logPrefix
):
self
.
game
=
game
self
.
logPrefix
=
logPrefix
self
.
process
=
None
self
.
starting
=
None
self
.
token
=
None
self
.
waitForAMPConnection
=
None
self
.
waitForProcessStart
=
None
self
.
connectingToGame
=
None
self
.
amp
=
None
self
.
server
=
None
self
.
joiningAgents
=
[]
def
stop
(
self
):
if
self
.
server
:
self
.
server
.
stopListening
()
self
.
server
=
None
async
def
startBot
(
self
,
aiName
,
fromLevel
=
False
,
nick
=
''
,
team
=
None
):
await
self
.
ensureProcessHasStarted
()
if
self
.
server
is
None
:
self
.
connectingToGame
=
Event
([
'result'
])
self
.
server
=
TrosnothServerFactory
(
self
.
game
,
noAuth
=
True
,
agentCallback
=
self
.
agentConnected
)
self
.
server
.
startListening
(
port
=
0
,
interface
=
LOCALHOST
)
await
self
.
amp
.
callRemote
(
ConnectToServer
,
port
=
self
.
server
.
port
.
getHost
().
port
)
connectingToGame
=
self
.
connectingToGame
self
.
connectingToGame
=
None
connectingToGame
.
execute
(
None
)
elif
self
.
connectingToGame
:
await
self
.
connectingToGame
.
waitOrRaise
()
authTag
=
len
(
self
.
joiningAgents
)
agentHasJoined
=
defer
.
Deferred
()
self
.
joiningAgents
.
append
((
agentHasJoined
,
fromLevel
))
await
self
.
amp
.
callRemote
(
StartBot
,
name
=
aiName
,
fromLevel
=
fromLevel
,
nick
=
nick
,
teamId
=
team
.
id
if
team
else
NEUTRAL_TEAM_ID
,
authTag
=
authTag
,
)
agent
=
await
agentHasJoined
return
agent
def
agentConnected
(
self
,
agent
,
authTag
):
d
,
fromLevel
=
self
.
joiningAgents
[
authTag
]
self
.
joiningAgents
[
authTag
]
=
None
while
self
.
joiningAgents
and
self
.
joiningAgents
[
-
1
]
is
None
:
self
.
joiningAgents
.
pop
()
agent
.
allowBotPlayer
(
fromLevel
)
d
.
callback
(
agent
)
async
def
ensureProcessHasStarted
(
self
):
if
self
.
starting
:
await
self
.
starting
.
waitOrRaise
()
return
if
self
.
process
:
return
success
=
False
self
.
starting
=
Event
([
'result'
])
try
:
await
self
.
_startProcess
()
success
=
True
except
Exception
as
e
:
self
.
starting
.
execute
(
e
)
raise
else
:
self
.
starting
.
execute
(
None
)
finally
:
self
.
starting
=
None
if
not
success
:
self
.
process
=
None
async
def
_startProcess
(
self
):
assert
self
.
process
is
None
self
.
process
=
BotProcessProtocol
(
self
)
self
.
token
=
uuid
.
uuid4
().
hex
.
encode
(
'ascii'
)
self
.
waitForAMPConnection
=
defer
.
Deferred
()
ampFactory
=
Factory
.
forProtocol
(
ArenaSideAMPProtocol
)
ampFactory
.
manager
=
self
ampEndpoint
=
TCP4ServerEndpoint
(
reactor
,
0
)
listeningPort
=
await
ampEndpoint
.
listen
(
ampFactory
)
try
:
ampPort
=
listeningPort
.
getHost
().
port
cmd
=
self
.
getCommand
()
+
[
str
(
ampPort
)]