Showing preview only (781K chars total). Download the full file or copy to clipboard to get everything.
Repository: Mrmaxmeier/BombSquad-Community-Mod-Manager
Branch: master
Commit: aeba3f685833
Files: 100
Total size: 747.4 KB
Directory structure:
gitextract_8htf1a4p/
├── .gitignore
├── LICENSE
├── README.md
├── index.json
├── mods/
│ ├── AroundTheWorld.py
│ ├── BackToYou.json
│ ├── BackToYou.py
│ ├── Basketball.json
│ ├── Basketball.py
│ ├── BuddyBunny.json
│ ├── BuddyBunny.py
│ ├── Collector.json
│ ├── Collector.py
│ ├── FillErUp.json
│ ├── FillErUp.py
│ ├── FlagDay.py
│ ├── GravityFalls.py
│ ├── Greed.json
│ ├── Greed.py
│ ├── GuessTheBomb.json
│ ├── GuessTheBomb.py
│ ├── HazardousCargo.json
│ ├── HazardousCargo.py
│ ├── Infection.json
│ ├── Infection.py
│ ├── JumpingContest.py
│ ├── LandGrab.json
│ ├── LandGrab.py
│ ├── Paint.py
│ ├── Portal.json
│ ├── Portal.py
│ ├── Protection.json
│ ├── Protection.py
│ ├── SharksAndMinnows.py
│ ├── Siege.py
│ ├── SimonSays.py
│ ├── SnoBallz.json
│ ├── SnoBallz.py
│ ├── SnowBallFight.json
│ ├── SnowBallFight.py
│ ├── WizardWar.json
│ ├── WizardWar.py
│ ├── ZombieHorde.json
│ ├── ZombieHorde.py
│ ├── airStrike.json
│ ├── airStrike.py
│ ├── arms_race.json
│ ├── arms_race.py
│ ├── auto_reloader.json
│ ├── auto_reloader.py
│ ├── bomb_on_my_head.json
│ ├── bomb_on_my_head.py
│ ├── bomberman.json
│ ├── bomberman.py
│ ├── boxing.json
│ ├── boxing.py
│ ├── brainFreeze.json
│ ├── brainFreeze.py
│ ├── bsBoxingOfTheHill.json
│ ├── bsBoxingOfTheHill.py
│ ├── bsKillZone.json
│ ├── bsKillZone.py
│ ├── catch_to_live.json
│ ├── catch_to_live.py
│ ├── fightOfFaith.json
│ ├── fightOfFaith.py
│ ├── frozenone.json
│ ├── frozenone.py
│ ├── iceDeathmatch.json
│ ├── iceDeathmatch.py
│ ├── magic_box.json
│ ├── magic_box.py
│ ├── modManager.json
│ ├── modManager.py
│ ├── puckDeathmatch.json
│ ├── puckDeathmatch.py
│ ├── quickGameButton.json
│ ├── quickGameButton.py
│ ├── settings_patcher.json
│ ├── settings_patcher.py
│ ├── smash.json
│ ├── smash.py
│ ├── snake.json
│ ├── snake.py
│ ├── snowyPowerup.json
│ ├── snowyPowerup.py
│ ├── surviveCurse.json
│ ├── surviveCurse.py
│ ├── ui_wrappers.json
│ └── ui_wrappers.py
├── requirements.txt
├── server/
│ ├── .gitignore
│ ├── Cargo.toml
│ └── src/
│ ├── main.rs
│ └── redis_middleware.rs
├── update_index.py
└── utils/
├── blender/
│ ├── README.md
│ └── bob_plugin.py
├── inject_mod.py
└── installer.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
1.3.8
audioCache
replays
.idea
.bsac
.bsac2
.bsuuid
*.py.bak
*.pyc
config.json
config.json.prev
node_modules
================================================
FILE: LICENSE
================================================
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org>
================================================
FILE: README.md
================================================
<h2>
Note: This repository is not maintained and is not compatible with current BombSquad versions (>v1.5).
See https://github.com/bombsquad-community/plugin-manager for a modern alternative.
</h2>
<h1>BombSquad Community Mod Manager</h1>
<h2>What is it?</h2>
This is a mod for the game <a href="http://www.froemling.net/apps/bombsquad">BombSquad</a> by <a href="http://www.froemling.net/about">Eric Froemling</a> that aims to improve the management of community created content for BombSquad.
It's build using the modding api so it can be used on all platforms and should be compatible with all recent versions of BombSquad.
A list of all mods can be viewed [here](http://mrmaxmeier.github.io/BombSquad-Community-Mod-Manager), you can also filter by category ([all minigames](http://mrmaxmeier.github.io/BombSquad-Community-Mod-Manager/#/category/minigames)) or view specific mods ([mod manager](http://mrmaxmeier.github.io/BombSquad-Community-Mod-Manager/#/mod/modManager)).
<h2>Installation</h2>
Put <a href="https://raw.githubusercontent.com/Mrmaxmeier/BombSquad-ModManager-and-Mods/master/utils/installer.py">installer.py</a> in your mods folder. This file will download and install the Mod-Manager and its dependencies.
You can find your mods folder in Settings > Advanced > Show Mods Folder.
<h6>Note:</h6>
On Android M or higher you'll need to give BombSquad access to the storage. You can do that by clicking on `Settings > Advanced > Show Mods Folder` or enabling it manually in the system settings.
| Platform | Path |
| --------- | ---------- |
| OS X | ~/Library/Containers/net.froemling.bombsquad/Data/Library/Application Support/BombSquad/mods |
| Android | *<*sdcard*>*/BombSquad/mods |
| Windows | %appdata%/BombSquad/mods |
| Linux | ~/.bombsquad/mods |
<h4>One-Liners</h4>
<table>
<tr>
<td>OSX</td>
<td>
<pre>cd ~/Library/Containers/net.froemling.bombsquad/Data/Library/Application\ Support/BombSquad/mods && curl -O https://raw.githubusercontent.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/master/utils/installer.py</pre>
</td>
</tr>
<tr>
<td>Linux (wget)</td>
<td>
<pre>wget -P ~/.bombsquad/mods https://raw.githubusercontent.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/master/utils/installer.py</pre>
</td>
</tr>
<tr>
<td>Linux (curl)</td>
<td>
<pre>cd ~/.bombsquad/mods && curl -O https://raw.githubusercontent.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/master/utils/installer.py</pre>
</td>
</tr>
<tr>
<td>Windows (PowerShell)</td>
<td>
<pre>wget https://raw.githubusercontent.com/Mrmaxmeier/BombSquad-ModManager-and-Mods/master/utils/installer.py -OutFile $env:APPDATA/BombSquad/mods/installer.py</pre>
</td>
</table>
<h2>Usage</h2>
After restarting BombSquad there should be a new button in the settings window.

Upon clicking this button a new window pops up.

You can download, install or delete mods here.
<h4>Tabs</h4>
The mods are grouped in three categories:
<table>
<tr>
<td>Minigames</td>
<td>Installing these will add games to the game select screen.</td>
</tr>
<tr>
<td>Utilities</td>
<td>These are mods that add UI elements or other non game related things </td>
</tr>
<tr>
<td>Libraries</td>
<td>These are mods that can be used as libraries by other mods.</td>
</tr>
</table>
You can also view all mods using the 'all' tab.
<h4>Settings</h4>
There is a settings button in the mod manager window.
| Setting | More infos |
| ---------- | ---------- |
| Branch | A List of all available branches can be found [here](https://api.github.com/repos/Mrmaxmeier/BombSquad-Community-Mod-Manager/branches) |
| Auto check for updates | This will check for updates while BombSquad is starting |
| Auto-update old mods | This will update mods with versions that are known to be old. <br \>Mods you are developing won't get updated by this. |
<h2>Contributing</h2>
Want to contribute? Great!
1. Fork it
2. Create a new file in the mods folder
3. Add a json file with additional infos (optional)
5. Open a Pull Request
6. Profit
<h2>License</h2>
```
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org>
```
================================================
FILE: index.json
================================================
{
"mods": {
"AroundTheWorld": {
"changelog": [
"Create AroundTheWorld.pyThis mod allows players to race around the Happy Thoughts map, touching platforms as they go. First one around the world wins!"
],
"commit_sha": "0673756fe8376878d81f0a6d1e4c163c6750c9cb",
"filename": "AroundTheWorld.py",
"md5": "58bbe46603794fb20e018cf015387674",
"old_md5s": [],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/0673756fe8376878d81f0a6d1e4c163c6750c9cb/mods/AroundTheWorld.py"
},
"BackToYou": {
"author": "joshville79",
"category": "minigames",
"changelog": [
"Here's a bunch of new and updated minigames!Important notes:bsPowerup.py is a modified version of the game file. It has to replace the original game file. Can mod manager do this? The modification is that it adds 2 new powerups: Snowballs and a Bunny helper bot that attacks other players (not you). For this to work it also requires BunnyBuddy.py and SnoBallz.py. I put that requirement (I think) in the bsPowerup.json file. You can see these in action on my game server. I couldn't figure out any other way to add the new powerups to every game other than modifying the original bsPowerup file.The Snowball Fight minigame also requires SnoBallz.py. I added a \"requires\" line in the .json file. It's the only minigame here that's not completely standalone.I called BuddyBunny, SnoBallz, and bsPowerup all \"utilities\" instead of \"minigames\" or \"libraries\" in the json files. I wasn't sure what would be best. If there's any way I can help, please let me know.",
"Add files via uploadHey, I have no idea if I did this right. I made a few mods and got requests to add to your mod manager. Let me know if I screwed up the process."
],
"commit_sha": "f0771dc63724a5b92c95a52d6ee74d4cab35eaf0",
"filename": "BackToYou.py",
"md5": "8b672f5a8d2876391bddbecdfed9b970",
"name": "Back To You",
"old_md5s": [
"ec65e09ff91f1535252718d3580ac927"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/f0771dc63724a5b92c95a52d6ee74d4cab35eaf0/mods/BackToYou.py"
},
"Basketball": {
"author": "MattZ45986",
"category": "minigames",
"changelog": [
"Add files via uploadAdd Basketball.py"
],
"commit_sha": "de5422b29a3e8b7c2c5e63539698d3ecc8e8c0c0",
"filename": "Basketball.py",
"md5": "5b77f61eae97b0c379eff4b6ed0b242c",
"name": "Basketball",
"old_md5s": [],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/de5422b29a3e8b7c2c5e63539698d3ecc8e8c0c0/mods/Basketball.py"
},
"BuddyBunny": {
"author": "joshville79",
"category": "libraries",
"changelog": [
"convert a bunch of files to linux line feeds (#25)",
"Here's a bunch of new and updated minigames!Important notes:bsPowerup.py is a modified version of the game file. It has to replace the original game file. Can mod manager do this? The modification is that it adds 2 new powerups: Snowballs and a Bunny helper bot that attacks other players (not you). For this to work it also requires BunnyBuddy.py and SnoBallz.py. I put that requirement (I think) in the bsPowerup.json file. You can see these in action on my game server. I couldn't figure out any other way to add the new powerups to every game other than modifying the original bsPowerup file.The Snowball Fight minigame also requires SnoBallz.py. I added a \"requires\" line in the .json file. It's the only minigame here that's not completely standalone.I called BuddyBunny, SnoBallz, and bsPowerup all \"utilities\" instead of \"minigames\" or \"libraries\" in the json files. I wasn't sure what would be best. If there's any way I can help, please let me know."
],
"commit_sha": "a483c74a4b6a9c540ae58904bce5164dcfd5f4d4",
"filename": "BuddyBunny.py",
"md5": "794110f3e9c9cecb6e3294cf1c829b67",
"name": "Buddy Bunny powerup",
"old_md5s": [
"2e1bd9ed5b9dab8c2fb4eb21a88689ec"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/a483c74a4b6a9c540ae58904bce5164dcfd5f4d4/mods/BuddyBunny.py"
},
"Collector": {
"author": "TheMikirog",
"category": "minigames",
"changelog": [
"Colletor - (fixes continued)- Changed game music\r- Made capsules fly from enemies much less violently, so they don't fall off cliff that easily\r- Added some tips at the start of the game",
"Collector - fixesThis gamemode had some serious flaws that made it unplayable or unfair.\r- Now deposit points in Team games are always in the center. Deposit points only change in FFA games.\r- Now capsules don't roll around as much, so there's less risk they would fall down the pit."
],
"commit_sha": "0ebd80ae04e67629b2cc1be3e76fa96b68e2a42f",
"filename": "Collector.py",
"md5": "da460fcf6c5cc622709141a3aa133e48",
"name": "Collector",
"old_md5s": [
"9f38dfeff4590bd1073d2397867d2fc9",
"6fd8ec35e9ced9d961e2efbd7f96b990",
"571ec87186cd1b74a0ba196b2a263648",
"9db6ae29f084aaa7afdd81953b6f5937"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/0ebd80ae04e67629b2cc1be3e76fa96b68e2a42f/mods/Collector.py"
},
"FillErUp": {
"author": "joshville79",
"category": "minigames",
"changelog": [
"Here's a bunch of new and updated minigames!Important notes:bsPowerup.py is a modified version of the game file. It has to replace the original game file. Can mod manager do this? The modification is that it adds 2 new powerups: Snowballs and a Bunny helper bot that attacks other players (not you). For this to work it also requires BunnyBuddy.py and SnoBallz.py. I put that requirement (I think) in the bsPowerup.json file. You can see these in action on my game server. I couldn't figure out any other way to add the new powerups to every game other than modifying the original bsPowerup file.The Snowball Fight minigame also requires SnoBallz.py. I added a \"requires\" line in the .json file. It's the only minigame here that's not completely standalone.I called BuddyBunny, SnoBallz, and bsPowerup all \"utilities\" instead of \"minigames\" or \"libraries\" in the json files. I wasn't sure what would be best. If there's any way I can help, please let me know."
],
"commit_sha": "f0771dc63724a5b92c95a52d6ee74d4cab35eaf0",
"filename": "FillErUp.py",
"md5": "e0f7e8c5b259c090269d269eca139106",
"name": "Fill 'Er Up",
"old_md5s": [],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/f0771dc63724a5b92c95a52d6ee74d4cab35eaf0/mods/FillErUp.py"
},
"FlagDay": {
"changelog": [
"Create FlagDay.pyThis game lets players take turns choosing their fate, picking flags and facing challenges to earn points. But beware..."
],
"commit_sha": "55a13e781e5aca80752f59c5bb7f5ccb2a7b4042",
"filename": "FlagDay.py",
"md5": "0a15acdc7ff94ac6e3dff79b088338e0",
"old_md5s": [],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/55a13e781e5aca80752f59c5bb7f5ccb2a7b4042/mods/FlagDay.py"
},
"GravityFalls": {
"changelog": [
"Create GravityFalls.pyStay on the ground for as long as you can. Don't fly away in this crazy mod."
],
"commit_sha": "729dc2dc599b17a889d1ebfcfef02bc52a0b6cef",
"filename": "GravityFalls.py",
"md5": "a7d7f9c4e898e18a758979bd7430b2b7",
"old_md5s": [],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/729dc2dc599b17a889d1ebfcfef02bc52a0b6cef/mods/GravityFalls.py"
},
"Greed": {
"author": "joshville79",
"category": "minigames",
"changelog": [
"Here's a bunch of new and updated minigames!Important notes:bsPowerup.py is a modified version of the game file. It has to replace the original game file. Can mod manager do this? The modification is that it adds 2 new powerups: Snowballs and a Bunny helper bot that attacks other players (not you). For this to work it also requires BunnyBuddy.py and SnoBallz.py. I put that requirement (I think) in the bsPowerup.json file. You can see these in action on my game server. I couldn't figure out any other way to add the new powerups to every game other than modifying the original bsPowerup file.The Snowball Fight minigame also requires SnoBallz.py. I added a \"requires\" line in the .json file. It's the only minigame here that's not completely standalone.I called BuddyBunny, SnoBallz, and bsPowerup all \"utilities\" instead of \"minigames\" or \"libraries\" in the json files. I wasn't sure what would be best. If there's any way I can help, please let me know.",
"move new mods to mods folder"
],
"commit_sha": "f0771dc63724a5b92c95a52d6ee74d4cab35eaf0",
"filename": "Greed.py",
"md5": "c997ab2e55fc0f52a015a0109e0dd6c2",
"name": "Greed",
"old_md5s": [
"716fc4ab7c3c5f2562540dd2aa4b9531"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/f0771dc63724a5b92c95a52d6ee74d4cab35eaf0/mods/Greed.py"
},
"GuessTheBomb": {
"author": "Paolo Valerdi",
"category": "minigames",
"changelog": [
"convert a bunch of files to linux line feeds (#25)",
"New minigameThis is just another meteor shower game but the bombs fall randomly"
],
"commit_sha": "a483c74a4b6a9c540ae58904bce5164dcfd5f4d4",
"filename": "GuessTheBomb.py",
"md5": "0c56aef73be562024b896e3ceef05cce",
"name": "Guess The Bomb",
"old_md5s": [
"069221cf6a656d3efe1ea69dabc12e8f"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/a483c74a4b6a9c540ae58904bce5164dcfd5f4d4/mods/GuessTheBomb.py"
},
"HazardousCargo": {
"author": "joshville79",
"category": "minigames",
"changelog": [
"convert a bunch of files to linux line feeds (#25)",
"Here's a bunch of new and updated minigames!Important notes:bsPowerup.py is a modified version of the game file. It has to replace the original game file. Can mod manager do this? The modification is that it adds 2 new powerups: Snowballs and a Bunny helper bot that attacks other players (not you). For this to work it also requires BunnyBuddy.py and SnoBallz.py. I put that requirement (I think) in the bsPowerup.json file. You can see these in action on my game server. I couldn't figure out any other way to add the new powerups to every game other than modifying the original bsPowerup file.The Snowball Fight minigame also requires SnoBallz.py. I added a \"requires\" line in the .json file. It's the only minigame here that's not completely standalone.I called BuddyBunny, SnoBallz, and bsPowerup all \"utilities\" instead of \"minigames\" or \"libraries\" in the json files. I wasn't sure what would be best. If there's any way I can help, please let me know."
],
"commit_sha": "a483c74a4b6a9c540ae58904bce5164dcfd5f4d4",
"filename": "HazardousCargo.py",
"md5": "1cb82c35c92a821a19d635854a1b7183",
"name": "Hazardous Cargo",
"old_md5s": [
"266a2b0a26d9a8c19fb8ab1afcaead83"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/a483c74a4b6a9c540ae58904bce5164dcfd5f4d4/mods/HazardousCargo.py"
},
"Infection": {
"author": "joshville79",
"category": "minigames",
"changelog": [
"convert a bunch of files to linux line feeds (#25)",
"Here's a bunch of new and updated minigames!Important notes:bsPowerup.py is a modified version of the game file. It has to replace the original game file. Can mod manager do this? The modification is that it adds 2 new powerups: Snowballs and a Bunny helper bot that attacks other players (not you). For this to work it also requires BunnyBuddy.py and SnoBallz.py. I put that requirement (I think) in the bsPowerup.json file. You can see these in action on my game server. I couldn't figure out any other way to add the new powerups to every game other than modifying the original bsPowerup file.The Snowball Fight minigame also requires SnoBallz.py. I added a \"requires\" line in the .json file. It's the only minigame here that's not completely standalone.I called BuddyBunny, SnoBallz, and bsPowerup all \"utilities\" instead of \"minigames\" or \"libraries\" in the json files. I wasn't sure what would be best. If there's any way I can help, please let me know."
],
"commit_sha": "a483c74a4b6a9c540ae58904bce5164dcfd5f4d4",
"filename": "Infection.py",
"md5": "b15d9384ea106b69b93c403d7a185f8f",
"name": "Infection",
"old_md5s": [
"a72d024cee252ae53039f2ad0936b198"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/a483c74a4b6a9c540ae58904bce5164dcfd5f4d4/mods/Infection.py"
},
"JumpingContest": {
"changelog": [
"Create JumpingContest.pyThis mod tests an underappreciated aspect of the game: jumping."
],
"commit_sha": "163ead5ffd2592f11c6ae2600f3f138baabfb018",
"filename": "JumpingContest.py",
"md5": "9f78c4bec42990c2504f2014914e7c24",
"old_md5s": [],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/163ead5ffd2592f11c6ae2600f3f138baabfb018/mods/JumpingContest.py"
},
"LandGrab": {
"author": "joshville79",
"category": "minigames",
"changelog": [
"rename \"Land Grab.py\" to \"LandGrab.py\" (#25)"
],
"commit_sha": "8f28b96d4ae9df51bbc8718a932f5d17938c5ce4",
"filename": "LandGrab.py",
"md5": "95526447f0031c1fcb1e2488a50e0db9",
"name": "Land Grab",
"old_md5s": [],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/8f28b96d4ae9df51bbc8718a932f5d17938c5ce4/mods/LandGrab.py"
},
"Paint": {
"changelog": [
"Create Paint.pyPaint is a Co-op game where artists can create true masterpieces ... Bombsquad style."
],
"commit_sha": "4ea62c8752eca7006fd7f0ecfed50b600b10b84a",
"filename": "Paint.py",
"md5": "12bc6efea06a65e10d571595e4824d8e",
"old_md5s": [],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/4ea62c8752eca7006fd7f0ecfed50b600b10b84a/mods/Paint.py"
},
"Protection": {
"author": "joshville79",
"category": "minigames",
"changelog": [
"Here's a bunch of new and updated minigames!Important notes:bsPowerup.py is a modified version of the game file. It has to replace the original game file. Can mod manager do this? The modification is that it adds 2 new powerups: Snowballs and a Bunny helper bot that attacks other players (not you). For this to work it also requires BunnyBuddy.py and SnoBallz.py. I put that requirement (I think) in the bsPowerup.json file. You can see these in action on my game server. I couldn't figure out any other way to add the new powerups to every game other than modifying the original bsPowerup file.The Snowball Fight minigame also requires SnoBallz.py. I added a \"requires\" line in the .json file. It's the only minigame here that's not completely standalone.I called BuddyBunny, SnoBallz, and bsPowerup all \"utilities\" instead of \"minigames\" or \"libraries\" in the json files. I wasn't sure what would be best. If there's any way I can help, please let me know.",
"move new mods to mods folder"
],
"commit_sha": "f0771dc63724a5b92c95a52d6ee74d4cab35eaf0",
"filename": "Protection.py",
"md5": "82d3509f2d8a99381a6b82db8a7ef716",
"name": "Protection",
"old_md5s": [
"a8fee2500811ab273f0db546d7dceba8"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/f0771dc63724a5b92c95a52d6ee74d4cab35eaf0/mods/Protection.py"
},
"SharksAndMinnows": {
"changelog": [
"Create SharksAndMinnows.pyThis classic game allows teams to play a sharks-and-minnows spin-off, compatible with Bombsquad rules and regulations."
],
"commit_sha": "a3fe6d87b1e2cc1ed77cb44a0213b45eef4decb0",
"filename": "SharksAndMinnows.py",
"md5": "57ce4125981997c9367d0da439c56f55",
"old_md5s": [],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/a3fe6d87b1e2cc1ed77cb44a0213b45eef4decb0/mods/SharksAndMinnows.py"
},
"Siege": {
"changelog": [
"Create Siege.pyThe object of the game is to break through the castle walls by whatever means possible to get at the flag inside. First one to grab it wins!"
],
"commit_sha": "e1439dc9eca46d99470c09b59fdc8028c6f3c550",
"filename": "Siege.py",
"md5": "7e4b7063579f43402df08a2d6afebf8a",
"old_md5s": [],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/e1439dc9eca46d99470c09b59fdc8028c6f3c550/mods/Siege.py"
},
"SimonSays": {
"changelog": [
"Create SimonSays.pyThis is a classic game of Simon Says ... Bombsquad style. Follow the commands, but only when Simon says to."
],
"commit_sha": "025f68c78c76ec390cae327a1679a7da0d9e9b2b",
"filename": "SimonSays.py",
"md5": "3872e52eab13983507591b48ecf0a2b3",
"old_md5s": [],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/025f68c78c76ec390cae327a1679a7da0d9e9b2b/mods/SimonSays.py"
},
"SnoBallz": {
"author": "joshville79",
"category": "libraries",
"changelog": [
"convert a bunch of files to linux line feeds (#25)",
"Here's a bunch of new and updated minigames!Important notes:bsPowerup.py is a modified version of the game file. It has to replace the original game file. Can mod manager do this? The modification is that it adds 2 new powerups: Snowballs and a Bunny helper bot that attacks other players (not you). For this to work it also requires BunnyBuddy.py and SnoBallz.py. I put that requirement (I think) in the bsPowerup.json file. You can see these in action on my game server. I couldn't figure out any other way to add the new powerups to every game other than modifying the original bsPowerup file.The Snowball Fight minigame also requires SnoBallz.py. I added a \"requires\" line in the .json file. It's the only minigame here that's not completely standalone.I called BuddyBunny, SnoBallz, and bsPowerup all \"utilities\" instead of \"minigames\" or \"libraries\" in the json files. I wasn't sure what would be best. If there's any way I can help, please let me know."
],
"commit_sha": "a483c74a4b6a9c540ae58904bce5164dcfd5f4d4",
"filename": "SnoBallz.py",
"md5": "ad1b04613718179b8e901b7ceafd8384",
"name": "SnoBallz powerup",
"old_md5s": [
"a05749ae364883a4f23d05d6788c9edb"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/a483c74a4b6a9c540ae58904bce5164dcfd5f4d4/mods/SnoBallz.py"
},
"SnowBallFight": {
"author": "joshville79",
"category": "minigames",
"changelog": [
"Here's a bunch of new and updated minigames!Important notes:bsPowerup.py is a modified version of the game file. It has to replace the original game file. Can mod manager do this? The modification is that it adds 2 new powerups: Snowballs and a Bunny helper bot that attacks other players (not you). For this to work it also requires BunnyBuddy.py and SnoBallz.py. I put that requirement (I think) in the bsPowerup.json file. You can see these in action on my game server. I couldn't figure out any other way to add the new powerups to every game other than modifying the original bsPowerup file.The Snowball Fight minigame also requires SnoBallz.py. I added a \"requires\" line in the .json file. It's the only minigame here that's not completely standalone.I called BuddyBunny, SnoBallz, and bsPowerup all \"utilities\" instead of \"minigames\" or \"libraries\" in the json files. I wasn't sure what would be best. If there's any way I can help, please let me know."
],
"commit_sha": "f0771dc63724a5b92c95a52d6ee74d4cab35eaf0",
"filename": "SnowBallFight.py",
"md5": "aaaaa9c177f0726d761eb18782dbee9f",
"name": "Snowball Fight (requires SnoBallz.py)",
"old_md5s": [],
"requires": [
"SnoBallz"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/f0771dc63724a5b92c95a52d6ee74d4cab35eaf0/mods/SnowBallFight.py"
},
"WizardWar": {
"author": "MattZ45986",
"category": "minigames",
"changelog": [
"Update game for advent of WizardNow that the game has a \"Grumbledorf\" character, I've put together this little mod to show off the new guy.",
"Rename Wizard War.py to WizardWar.py"
],
"commit_sha": "33e6d75ee504241c4206c6bd3e986e52ffa1b0d7",
"filename": "WizardWar.py",
"md5": "dd76a8d19ca21e33332153a0ce454ee1",
"name": "WizardWar",
"old_md5s": [
"46315134786af3bf46396918d663137d"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/33e6d75ee504241c4206c6bd3e986e52ffa1b0d7/mods/WizardWar.py"
},
"ZombieHorde": {
"author": "joshville79",
"category": "minigames",
"changelog": [
"Here's a bunch of new and updated minigames!Important notes:bsPowerup.py is a modified version of the game file. It has to replace the original game file. Can mod manager do this? The modification is that it adds 2 new powerups: Snowballs and a Bunny helper bot that attacks other players (not you). For this to work it also requires BunnyBuddy.py and SnoBallz.py. I put that requirement (I think) in the bsPowerup.json file. You can see these in action on my game server. I couldn't figure out any other way to add the new powerups to every game other than modifying the original bsPowerup file.The Snowball Fight minigame also requires SnoBallz.py. I added a \"requires\" line in the .json file. It's the only minigame here that's not completely standalone.I called BuddyBunny, SnoBallz, and bsPowerup all \"utilities\" instead of \"minigames\" or \"libraries\" in the json files. I wasn't sure what would be best. If there's any way I can help, please let me know.",
"Add files via uploadHey, I have no idea if I did this right. I made a few mods and got requests to add to your mod manager. Let me know if I screwed up the process."
],
"commit_sha": "f0771dc63724a5b92c95a52d6ee74d4cab35eaf0",
"filename": "ZombieHorde.py",
"md5": "2117baf2a313305199b39ce75970aba4",
"name": "Zombie Horde",
"old_md5s": [
"716d5b347b42f18156e7cc85a4a175ee"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/f0771dc63724a5b92c95a52d6ee74d4cab35eaf0/mods/ZombieHorde.py"
},
"airStrike": {
"author": "SoKpl",
"category": "minigames",
"changelog": [
"bump all mod api versions",
"add Air Strike, see #4"
],
"commit_sha": "8d599cb0829b4f28d03db30e61ac618e8f1e0779",
"filename": "airStrike.py",
"md5": "6cfa8b25079832edec4862958fc223f2",
"name": "Air Strike",
"old_md5s": [
"23a8cefb018aefae51442b0554fa6e64"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/8d599cb0829b4f28d03db30e61ac618e8f1e0779/mods/airStrike.py"
},
"arms_race": {
"author": "Mrmaxmeier",
"category": "minigames",
"changelog": [
"prevent arms race upgrade on team kill (fixes #22)",
"bump all mod api versions"
],
"commit_sha": "4044dd3363efc75421db36cef3f770d499811d47",
"filename": "arms_race.py",
"md5": "6ef1cf7e90801851caf145ec1cb24f06",
"name": "Arms Race",
"old_md5s": [
"812023fcef83769a5a937cb8e8b90d44",
"e23a86e0b95291192c1d3463df3b0605",
"6ff1810f9d73a2b698d19216b36a4413",
"b725e48f91fa04197aea4cc1eefc1cbf"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/4044dd3363efc75421db36cef3f770d499811d47/mods/arms_race.py"
},
"auto_reloader": {
"author": "Mrmaxmeier",
"category": "utilities",
"changelog": [
"bump all mod api versions",
"rating ui"
],
"commit_sha": "8d599cb0829b4f28d03db30e61ac618e8f1e0779",
"filename": "auto_reloader.py",
"md5": "c80cb4f40bf8f9bd9b7a4f75b0eb0a9d",
"name": "Auto Reloader",
"old_md5s": [
"d7924cf4c9e684120f376d0710114391",
"48611852f3386839093cd9115c2d6152",
"115932c45f0443290c3798e8762b6e9e",
"969de56c489c774d116eed0a40632b11",
"41588189e303988a9151523e71e689b0"
],
"supports": [
"config_editor"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/8d599cb0829b4f28d03db30e61ac618e8f1e0779/mods/auto_reloader.py"
},
"bomb_on_my_head": {
"author": "Mrmaxmeier",
"category": "minigames",
"changelog": [
"bump all mod api versions",
"refactoring"
],
"commit_sha": "8d599cb0829b4f28d03db30e61ac618e8f1e0779",
"filename": "bomb_on_my_head.py",
"md5": "0a2d23af4260764799268cf5bc3bdb43",
"name": "Bomb on my Head",
"old_md5s": [
"c16286fe16dd5f2594e0836953fdfd68",
"6963c68439371d19fb52458e064dc930"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/8d599cb0829b4f28d03db30e61ac618e8f1e0779/mods/bomb_on_my_head.py"
},
"bomberman": {
"author": "Mrmaxmeier",
"category": "minigames",
"changelog": [
"bump all mod api versions",
"refactoring"
],
"commit_sha": "8d599cb0829b4f28d03db30e61ac618e8f1e0779",
"filename": "bomberman.py",
"md5": "b683a0481e1ef2f06525d6e3ff754fce",
"name": "Bomberman",
"old_md5s": [
"5019f3cb21e319b175bbeba4378e0926",
"1eafb570a01dcb157f737ff391424cdf"
],
"tag": "experimental",
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/8d599cb0829b4f28d03db30e61ac618e8f1e0779/mods/bomberman.py"
},
"boxing": {
"author": "TheMikirog",
"category": "minigames",
"changelog": [
"bump all mod api versions",
"Merge pull request #6 from TheMikirog/masterBoxing: Gameplay changes"
],
"commit_sha": "8d599cb0829b4f28d03db30e61ac618e8f1e0779",
"filename": "boxing.py",
"md5": "119d3ea4808d79d6c92942821565aec5",
"name": "Boxing",
"old_md5s": [
"f60cfb347f93e1fa25f56cad057ab0d5",
"9485eac414e791f8eb06b7e93e0897e4"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/8d599cb0829b4f28d03db30e61ac618e8f1e0779/mods/boxing.py"
},
"brainFreeze": {
"author": "TheMikirog",
"category": "minigames",
"changelog": [
"bump all mod api versions",
"Rename brainFreeze to brainFreeze.py"
],
"commit_sha": "8d599cb0829b4f28d03db30e61ac618e8f1e0779",
"filename": "brainFreeze.py",
"md5": "bc7b703a365c67c5b37d6c6cb2c94f02",
"name": "Brain Freeze",
"old_md5s": [
"3a9b5bbdb96deacdb4504a752b3618ee"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/8d599cb0829b4f28d03db30e61ac618e8f1e0779/mods/brainFreeze.py"
},
"bsBoxingOfTheHill": {
"author": "joshville79",
"category": "minigames",
"changelog": [
"Add files via uploadHey, I have no idea if I did this right. I made a few mods and got requests to add to your mod manager. Let me know if I screwed up the process."
],
"commit_sha": "09be1d940c0db5f01587911930cc212982a7b020",
"filename": "bsBoxingOfTheHill.py",
"md5": "dd81f8f2ccb148a6e88dd96d9e91f248",
"name": "Boxing Of The Hill",
"old_md5s": [],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/09be1d940c0db5f01587911930cc212982a7b020/mods/bsBoxingOfTheHill.py"
},
"bsKillZone": {
"author": "joshville79",
"category": "minigames",
"changelog": [
"convert a bunch of files to linux line feeds (#25)",
"Add files via uploadHey, I have no idea if I did this right. I made a few mods and got requests to add to your mod manager. Let me know if I screwed up the process."
],
"commit_sha": "a483c74a4b6a9c540ae58904bce5164dcfd5f4d4",
"filename": "bsKillZone.py",
"md5": "15040077256ea55a394cb28badd7ee06",
"name": "Kill Zone",
"old_md5s": [
"1b5c3d11a408f1cb78a09f0758b6e980"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/a483c74a4b6a9c540ae58904bce5164dcfd5f4d4/mods/bsKillZone.py"
},
"catch_to_live": {
"author": "Deva",
"category": "minigames",
"changelog": [
"Add more settings and change color to normal",
"rename game"
],
"commit_sha": "352e1a82a46c431459842c2a302a31385aa1e872",
"filename": "catch_to_live.py",
"md5": "23530bf4ea77e546dd99212203864409",
"name": "CatchToLive",
"old_md5s": [
"d279afd2952852bafb99d04a63d92e60"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/352e1a82a46c431459842c2a302a31385aa1e872/mods/catch_to_live.py"
},
"fightOfFaith": {
"author": "SoKpl",
"category": "minigames",
"changelog": [
"bump all mod api versions",
"added 'Fight of Faith', see #1"
],
"commit_sha": "8d599cb0829b4f28d03db30e61ac618e8f1e0779",
"filename": "fightOfFaith.py",
"md5": "8acf4285dee7fb154290b2709006521d",
"name": "Fight of Faith",
"old_md5s": [
"c7f6864575253c2d4f594cb08daf2769"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/8d599cb0829b4f28d03db30e61ac618e8f1e0779/mods/fightOfFaith.py"
},
"frozenone": {
"author": "Mrmaxmeier",
"category": "minigames",
"changelog": [
"bump all mod api versions",
"refactoring"
],
"commit_sha": "8d599cb0829b4f28d03db30e61ac618e8f1e0779",
"filename": "frozenone.py",
"md5": "e37c20cad5f7e6e54c9961e15d30ce70",
"name": "The Frozen One",
"old_md5s": [
"c99d65d6b3051cb60d48c565c6b2b66e",
"483fe2ea852fe51525748f472d7d787b",
"0de2033b65a83260413a5a49607bb4c5",
"0a6a3366c7103712a7119e5efc4d4a15"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/8d599cb0829b4f28d03db30e61ac618e8f1e0779/mods/frozenone.py"
},
"iceDeathmatch": {
"author": "SoKpl",
"category": "minigames",
"changelog": [
"bump all mod api versions",
"add \"Ice Deathmatch\" by SoKpl#7"
],
"commit_sha": "8d599cb0829b4f28d03db30e61ac618e8f1e0779",
"filename": "iceDeathmatch.py",
"md5": "052236109d110187da641b2dd5964ae1",
"name": "Ice Deathmatch",
"old_md5s": [
"9796fed0dd67c68a9e7eef95d4a51da1"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/8d599cb0829b4f28d03db30e61ac618e8f1e0779/mods/iceDeathmatch.py"
},
"magic_box": {
"author": "Mrmaxmeier",
"category": "minigames",
"changelog": [
"bump all mod api versions",
"cleanup magic_box"
],
"commit_sha": "8d599cb0829b4f28d03db30e61ac618e8f1e0779",
"filename": "magic_box.py",
"md5": "15f629062771aa87e538dc697c5eb525",
"name": "Magic Box",
"old_md5s": [
"7fae4c59cb8bfe02936722c1ac17a4bc",
"244b4fcbdc2c74904254d47272bc4b9e",
"3aac96b22db7dbc1e6cf2306d3454228",
"2340f5eee0252ac43a2e2fb96e73700e"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/8d599cb0829b4f28d03db30e61ac618e8f1e0779/mods/magic_box.py"
},
"modManager": {
"author": "Mrmaxmeier",
"category": "utilities",
"changelog": [
"only generate uuid if the stat server is enabled",
"end smash game if team leaves completly"
],
"commit_sha": "3672c8fdd3a6a26aa7321e264f33a9e9a83232e8",
"filename": "modManager.py",
"md5": "536b069e5b60bbeee052b03464991ce9",
"name": "Mod Manager (this thingy)",
"old_md5s": [
"79fad6241b448f45be7a97b7c5aa3dd9",
"95137096a9c415267e4bfb4ee75c9b73",
"5c0fac4ce24659ae410a56faced81d25",
"72efc28be645667697116e6191ababfe",
"d0619dbfde6337d656482312f38d4574"
],
"requires": [
"ui_wrappers",
"settings_patcher"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/3672c8fdd3a6a26aa7321e264f33a9e9a83232e8/mods/modManager.py"
},
"puckDeathmatch": {
"author": "Mrmaxmeier",
"category": "minigames",
"changelog": [
"bump all mod api versions",
"puck timeout"
],
"commit_sha": "8d599cb0829b4f28d03db30e61ac618e8f1e0779",
"filename": "puckDeathmatch.py",
"md5": "4ee530ed550d4adcd1f5b2600688c066",
"name": "Puck Deathmatch",
"old_md5s": [
"8c4f61495cd1cb5221be02cfa8a58e45",
"034af0481765c2502dc184e5657dc435"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/8d599cb0829b4f28d03db30e61ac618e8f1e0779/mods/puckDeathmatch.py"
},
"quickGameButton": {
"author": "Mrmaxmeier",
"category": "utilities",
"changelog": [
"fix quick-game-button",
"update quickGameButton to API v4"
],
"commit_sha": "1d1bb169d32004924d6457a5f8ae4109cfece58c",
"filename": "quickGameButton.py",
"md5": "da1b86df0af645733d050ee5a5831747",
"name": "Quick-Game Button",
"old_md5s": [
"090df7b52669e73b3a898788d73a6bf8",
"210c7ea410f847b8d4146801f7108471",
"5b22370f25e872746283d45790af7e67",
"9dbbc871cc8457bbced9420c11681c72",
"a9d97c3630a84baafc34e68968d86eb7"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/1d1bb169d32004924d6457a5f8ae4109cfece58c/mods/quickGameButton.py"
},
"settings_patcher": {
"author": "Mrmaxmeier",
"category": "libraries",
"changelog": [
"replace bs.getResource calls",
"even more flake8"
],
"commit_sha": "724587f96a6011b863903b389ef7babce70976a7",
"filename": "settings_patcher.py",
"md5": "2a39de960bfcc989876e6f843df456a2",
"name": "settings_patcher",
"old_md5s": [
"b47906864b52626ccde30eba89491674",
"fcfa6832da8c59e08afd1eef0d8139b5",
"85217ec90f53b02dc3646030796f3dd5",
"474dbf37a8b1f36e532e0e936f9c0f4b"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/724587f96a6011b863903b389ef7babce70976a7/mods/settings_patcher.py"
},
"smash": {
"author": "Mrmaxmeier",
"category": "minigames",
"changelog": [
"end smash game if team leaves completly",
"bump all mod api versions"
],
"commit_sha": "86072bfdadbd9205f897396825a8104fe2cbb630",
"filename": "smash.py",
"md5": "1210d0a95ee6fd3c9e05066dbc8a7c0b",
"name": "Super Smash",
"old_md5s": [
"44452c0419bb398be64dbac6379ba560",
"339ab2df890ae78b57507224bab11985",
"5916f2a3a15b623802e454dba70fb7f2",
"5dd773cb8407f92618b29da5134cd6d2"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/86072bfdadbd9205f897396825a8104fe2cbb630/mods/smash.py"
},
"snake": {
"author": "Mrmaxmeier",
"category": "minigames",
"changelog": [
"bump all mod api versions",
"refactoring"
],
"commit_sha": "8d599cb0829b4f28d03db30e61ac618e8f1e0779",
"filename": "snake.py",
"md5": "49d878c10214d4ccec5df70b17e3793a",
"name": "Snake",
"old_md5s": [
"b7ed1f0b4f5ad311b2f35406ff07588f",
"76032fe956ce6b9805bcb2453a1decf5"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/8d599cb0829b4f28d03db30e61ac618e8f1e0779/mods/snake.py"
},
"snowyPowerup": {
"author": "joshville79",
"category": "libraries",
"changelog": [
"fix for bsFootball's powerup handling",
"Renabe bsPowerup to snowyPowerup, utilize monkey patching (#25)"
],
"commit_sha": "017a13dbe85c78220175fb795bd81e1b5e66c0e9",
"filename": "snowyPowerup.py",
"md5": "ce805e9d11cef2002d24b9dab6654595",
"name": "Modified bsPowerup.py",
"old_md5s": [
"9a5abe159a10e15f5219dce1ac7e6176"
],
"requires": [
"BuddyBunny",
"SnoBallz"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/017a13dbe85c78220175fb795bd81e1b5e66c0e9/mods/snowyPowerup.py"
},
"surviveCurse": {
"author": "joshville79",
"category": "minigames",
"changelog": [
"move new mods to mods folder"
],
"commit_sha": "22846a813dc5a550a49a74307d86c3601d58cf4e",
"filename": "surviveCurse.py",
"md5": "29e21b16f3d7e4003532f0155a175ac3",
"name": "Survive the Curse!",
"old_md5s": [],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/22846a813dc5a550a49a74307d86c3601d58cf4e/mods/surviveCurse.py"
},
"ui_wrappers": {
"author": "Mrmaxmeier",
"category": "libraries",
"changelog": [
"add note about textWidget.set(text=...)",
"more flake8"
],
"commit_sha": "f2c1140ba899c0a5dbbe683fd767343449258942",
"filename": "ui_wrappers.py",
"md5": "421c7d87f4d832e2d2e42c462fc3d63a",
"name": "ui_wrappers",
"old_md5s": [
"9f813943333a21f139b45487c0579224",
"069d4605c92528211e0a8c8bb67a3c22",
"cbfce8f368e32a21159b1ed94f2d55b1",
"7df3a7c699903f8a0c8b8d6c847b0840",
"8d1e6e55ae9a953de95278d5317c3476"
],
"url": "https://cdn.rawgit.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/f2c1140ba899c0a5dbbe683fd767343449258942/mods/ui_wrappers.py"
}
},
"version": 1.1
}
================================================
FILE: mods/AroundTheWorld.py
================================================
import bs
import random
import bsUtils
def bsGetAPIVersion():
# see bombsquadgame.com/apichanges
return 4
def bsGetGames():
return [AroundTheWorld]
class AroundTheWorld(bs.TeamGameActivity):
@classmethod
def getName(cls):
return 'Around The World'
@classmethod
def getDescription(cls,sessionType):
return 'Race around the world.'
@classmethod
def getScoreInfo(cls):
return {'scoreName':'Time',
'lowerIsBetter':True,
'scoreType':'milliseconds'}
@classmethod
def supportsSessionType(cls,sessionType):
return True if (issubclass(sessionType,bs.TeamsSession)
or issubclass(sessionType,bs.FreeForAllSession)) else False
@classmethod
def getSupportedMaps(cls,sessionType):
return ['Happy Thoughts']
@classmethod
def getSettings(cls,sessionType):
settings = [("Laps",{'minValue':1,"default":3,"increment":1}),
("Time Limit",{'choices':[('None',0),('1 Minute',60),
('2 Minutes',120),('5 Minutes',300),
('10 Minutes',600),('20 Minutes',1200)],'default':0}),
("Epic Mode",{'default':False})]
if issubclass(sessionType,bs.TeamsSession):
settings.append(("Entire Team Must Finish",{'default':False}))
return settings
def __init__(self,settings):
self._raceStarted = False
bs.TeamGameActivity.__init__(self,settings)
for player in self.players:
player.gameData['lastPoint'] = 0
self._scoreBoard = bs.ScoreBoard()
if self.settings['Epic Mode']: self._isSlowMotion = True
self._scoreSound = bs.getSound("score")
self._swipSound = bs.getSound("swip")
self._lastTeamTime = None
self._frontRaceRegion = None
self.info = bs.NodeActor(bs.newNode('text',
attrs={'vAttach': 'bottom',
'hAlign': 'center',
'vrDepth': 0,
'color': (0,.2,0),
'shadow': 1.0,
'flatness': 1.0,
'position': (0,0),
'scale': 0.8,
'text': "Created by MattZ45986 on Github",
}))
def getInstanceDescription(self):
if isinstance(self.getSession(),bs.TeamsSession) and self.settings.get('Entire Team Must Finish', False):
tStr = ' Your entire team has to finish.'
else: tStr = ''
if self.settings['Laps'] > 1: s = ('${ARG1} laps.'+tStr,self.settings['Laps'])
else: s = 'Fly 1 lap.'+tStr
return s
def getInstanceScoreBoardDescription(self):
if self.settings['Laps'] > 1: s = ('fly ${ARG1} laps',self.settings['Laps'])
else: s = 'fly 1 lap'
return s
def spawnPlayerSpaz(self,player,position=(0,0,0),angle=None):
posList = ((0,5,0),(9,11,0),(0,12,0),(-11,11,0))
try: pos = posList[player.gameData['lastPoint']]
except: pos = (0,5,0)
position = (pos[0]+random.random()*2 -1 ,pos[1],pos[2])
name = player.getName()
color = player.color
highlight = player.highlight
lightColor = bsUtils.getNormalizedColor(color)
displayColor = bs.getSafeColor(color,targetIntensity=0.75)
spaz = bs.PlayerSpaz(color=color,
highlight=highlight,
character=player.character,
player=player)
player.setActor(spaz)
if isinstance(self.getSession(),bs.CoopSession) and self.getMap().getName() in ['Courtyard','Tower D']:
mat = self.getMap().preloadData['collideWithWallMaterial']
spaz.node.materials += (mat,)
spaz.node.rollerMaterials += (mat,)
spaz.node.name = name
spaz.node.nameColor = displayColor
if self._raceStarted: spaz.connectControlsToPlayer()
spaz.handleMessage(bs.StandMessage(position,angle if angle is not None else random.uniform(0,360)))
t = bs.getGameTime()
bs.playSound(self._spawnSound,1,position=spaz.node.position)
light = bs.newNode('light',attrs={'color':lightColor})
spaz.node.connectAttr('position',light,'position')
bsUtils.animate(light,'intensity',{0:0,250:1,500:0})
bs.gameTimer(500,light.delete)
if not self._raceStarted: player.gameData['lastPoint'] = 0
bs.gameTimer(250,bs.Call(self.checkPt,player))
return spaz
def onTransitionIn(self):
bs.TeamGameActivity.onTransitionIn(self, music='Epic Race' if self.settings['Epic Mode'] else 'Race')
self._nubTex = bs.getTexture('nub')
self._beep1Sound = bs.getSound('raceBeep1')
self._beep2Sound = bs.getSound('raceBeep2')
def _flashPlayer(self,player,scale):
pos = player.actor.node.position
light = bs.newNode('light',
attrs={'position':pos,
'color':(1,1,0),
'heightAttenuated':False,
'radius':0.4})
bs.gameTimer(500,light.delete)
bs.animate(light,'intensity',{0:0,100:1.0*scale,500:0})
def onTeamJoin(self,team):
team.gameData['time'] = None
team.gameData['lap'] = 0
team.gameData['finished'] = False
self._updateScoreBoard()
def onPlayerJoin(self,player):
player.gameData['lastRegion'] = 0
player.gameData['lap'] = 0
player.gameData['distance'] = 0.0
player.gameData['finished'] = False
player.gameData['rank'] = None
bs.TeamGameActivity.onPlayerJoin(self,player)
def onPlayerLeave(self,player):
bs.TeamGameActivity.onPlayerLeave(self,player)
if isinstance(self.getSession(),bs.TeamsSession) and self.settings.get('Entire Team Must Finish'):
bs.screenMessage(bs.Lstr(translate=('statements', '${TEAM} is disqualified because ${PLAYER} left'),
subs=[('${TEAM}',player.getTeam().name),
('${PLAYER}',player.getName(full=True))]),color=(1,1,0))
player.getTeam().gameData['finished'] = True
player.getTeam().gameData['time'] = None
player.getTeam().gameData['lap'] = 0
bs.playSound(bs.getSound("boo"))
for player in player.getTeam().players:
player.gameData['lap'] = 0
player.gameData['finished'] = True
try: player.actor.handleMessage(bs.DieMessage())
except Exception: pass
bs.gameTimer(1,self._checkEndGame)
def _updateScoreBoard(self):
for team in self.teams:
distances = [player.gameData['distance'] for player in team.players]
if len(distances) == 0: teamDist = 0
else:
if isinstance(self.getSession(),bs.TeamsSession) and self.settings.get('Entire Team Must Finish'):
teamDist = min(distances)
else:
teamDist = max(distances)
self._scoreBoard.setTeamValue(team,teamDist,self.settings['Laps'],flash=(teamDist >= float(self.settings['Laps'])),showValue=False)
if (teamDist >= float(self.settings['Laps'])): self.checkEnd()
def onBegin(self):
bs.TeamGameActivity.onBegin(self)
self.setupStandardTimeLimit(self.settings['Time Limit'])
self.setupStandardPowerupDrops()
self._teamFinishPts = 100
# throw a timer up on-screen
self._timeText = bs.NodeActor(bs.newNode('text',
attrs={'vAttach':'top','hAttach':'center','hAlign':'right',
'color':(1,1,1,.5),'flatness':0.5,'shadow':0.5,
'position':(600,-500),'scale':1.4,'text':'Touch\nthe\nright,\ntop,\nleft,\nand\nbottom\nplatforms\nin\norder.'}))
self._timer = bs.OnScreenTimer()
self._scoreBoardTimer = bs.Timer(250,self._updateScoreBoard,repeat=True)
if self._isSlowMotion:
tScale = 0.4
lightY = 50
else:
tScale = 1.0
lightY = 150
lStart = int(7100*tScale)
inc = int(1250*tScale)
bs.gameTimer(lStart,self._doLight1)
bs.gameTimer(lStart+inc,self._doLight2)
bs.gameTimer(lStart+2*inc,self._doLight3)
bs.gameTimer(lStart+3*inc,self._startRace)
self._startLights = []
for i in range(4):
l = bs.newNode('image',
attrs={'texture':bs.getTexture('nub'),
'opacity':1.0,
'absoluteScale':True,
'position':(-75+i*50,lightY),
'scale':(50,50),
'attach':'center'})
bs.animate(l,'opacity',{4000*tScale:0,5000*tScale:1.0,12000*tScale:1.0,12500*tScale:0.0})
bs.gameTimer(int(13000*tScale),l.delete)
self._startLights.append(l)
self._startLights[0].color = (0.2,0,0)
self._startLights[1].color = (0.2,0,0)
self._startLights[2].color = (0.2,0.05,0)
self._startLights[3].color = (0.0,0.3,0)
def _doLight1(self):
self._startLights[0].color = (1.0,0,0)
bs.playSound(self._beep1Sound)
def _doLight2(self):
self._startLights[1].color = (1.0,0,0)
bs.playSound(self._beep1Sound)
def _doLight3(self):
self._startLights[2].color = (1.0,0.3,0)
bs.playSound(self._beep1Sound)
def _startRace(self):
self._startLights[3].color = (0.0,1.0,0)
bs.playSound(self._beep2Sound)
for player in self.players:
if player.actor is not None:
try:player.actor.connectControlsToPlayer()
except Exception,e: print 'Exception in race player connects:',e
self._timer.start()
self._raceStarted = True
def checkPt(self,player):
if not player.isAlive(): return
pos = player.actor.node.positionCenter
if 8 < pos[0] < 11 and 10.5 < pos[1] < 13:
if player.gameData['lastPoint'] in (2,3):
self.killPlayer(player)
return
elif player.gameData['lastPoint'] == 0: player.gameData['distance'] += .25
player.gameData['lastPoint'] = 1
if -1 < pos[0] < 1 and 11.5 < pos[1] < 15:
if player.gameData['lastPoint'] in (3,0):
self.killPlayer(player)
return
elif player.gameData['lastPoint'] == 1: player.gameData['distance'] += .25
player.gameData['lastPoint'] = 2
if -12.5 < pos[0] < -10 and 10.5 < pos[1] < 13:
if player.gameData['lastPoint'] in (0,1):
self.killPlayer(player)
return
elif player.gameData['lastPoint'] == 2: player.gameData['distance'] += .25
player.gameData['lastPoint'] = 3
if -2 < pos[0] < 2 and 4.5 < pos[1] < 6.5:
if player.gameData['lastPoint'] in (1,2):
self.killPlayer(player)
return
elif player.gameData['lastPoint'] == 3: player.gameData['distance'] += .25
player.gameData['lastPoint'] = 0
bs.gameTimer(250,bs.Call(self.checkPt,player))
def checkEnd(self):
for player in self.players:
if player.gameData['distance'] >= self.settings['Laps']:
player.getTeam().gameData['time'] = (bs.getGameTime() - self._timer.getStartTime())
player.actor.node.delete()
self.endGame()
def killPlayer(self,player):
player.actor.handleMessage(bs.DieMessage())
bs.screenMessage("Killing " + player.getName() + " for skipping part of the track.", (1,0,0))
def endGame(self):
if self._timer.hasStarted():
self._timer.stop(endTime=None if self._lastTeamTime is None else (self._timer.getStartTime()+self._lastTeamTime))
results = bs.TeamGameResults()
for t in self.teams: results.setTeamScore(t,t.gameData['time'])
self.end(results=results,announceWinningTeam=True)
def handleMessage(self,m):
if isinstance(m,bs.PlayerSpazDeathMessage):
bs.TeamGameActivity.handleMessage(self,m) # augment default
try:
player = m.spaz.getPlayer()
if player is None:
bs.printError('FIXME: getPlayer() should no longer ever be returning None')
else:
if not player.exists(): raise Exception()
team = player.getTeam()
except Exception: return
if not player.gameData['finished']: self.respawnPlayer(player,respawnTime=1000)
else:
bs.TeamGameActivity.handleMessage(self,m)
================================================
FILE: mods/BackToYou.json
================================================
{
"name": "Back To You",
"author": "joshville79",
"category": "minigames"
}
================================================
FILE: mods/BackToYou.py
================================================
import bs
import random
import bsUtils
#import PlayerSpaz
def bsGetAPIVersion():
# see bombsquadgame.com/apichanges
return 4
def bsGetGames():
return [BackToYou]
class Icon(bs.Actor):
def __init__(self,player,position,scale,showLives=True,showDeath=True,
nameScale=1.0,nameMaxWidth=115.0,flatness=1.0,shadow=1.0):
bs.Actor.__init__(self)
self._player = player
self._showLives = showLives
self._showDeath = showDeath
self._nameScale = nameScale
self._outlineTex = bs.getTexture('characterIconMask')
icon = player.getIcon()
self.node = bs.newNode('image',
owner=self,
attrs={'texture':icon['texture'],
'tintTexture':icon['tintTexture'],
'tintColor':icon['tintColor'],
'vrDepth':400,
'tint2Color':icon['tint2Color'],
'maskTexture':self._outlineTex,
'opacity':1.0,
'absoluteScale':True,
'attach':'bottomCenter'})
self._nameText = bs.newNode('text',
owner=self.node,
attrs={'text':player.getName(),
'color':bs.getSafeColor(player.getTeam().color),
'hAlign':'center',
'vAlign':'center',
'vrDepth':410,
'maxWidth':nameMaxWidth,
'shadow':shadow,
'flatness':flatness,
'hAttach':'center',
'vAttach':'bottom'})
if self._showLives:
self._livesText = bs.newNode('text',
owner=self.node,
attrs={'text':'x0',
'color':(1,1,0.5),
'hAlign':'left',
'vrDepth':430,
'shadow':1.0,
'flatness':1.0,
'hAttach':'center',
'vAttach':'bottom'})
self.setPositionAndScale(position,scale)
def setPositionAndScale(self,position,scale):
self.node.position = position
self.node.scale = [70.0*scale]
self._nameText.position = (position[0],position[1]+scale*52.0)
self._nameText.scale = 1.0*scale*self._nameScale
if self._showLives:
self._livesText.position = (position[0]+scale*10.0,position[1]-scale*43.0)
self._livesText.scale = 1.0*scale
def updateForLives(self):
if self._player.exists():
lives = self._player.gameData['lives']
else: lives = 0
if self._showLives:
if lives > 0: self._livesText.text = 'x'+str(lives-1)
else: self._livesText.text = ''
if lives == 0:
myAct = self._player.actor.getActivity()
if self._player in myAct.winners:
if myAct.winners[0] == self._player:
self._livesText.text = "1st"
elif myAct.winners[1] == self._player:
self._livesText.text = "2nd"
elif myAct.winners[2] == self._player:
self._livesText.text = "3rd"
else:
self._nameText.opacity = 0.2
self.node.color = (0.7,0.3,0.3)
self.node.opacity = 0.2
def handlePlayerSpawned(self):
if not self.node.exists(): return
self.node.opacity = 1.0
self.updateForLives()
def handlePlayerDied(self):
if not self.node.exists(): return
if self._showDeath:
bs.animate(self.node,'opacity',{0:1.0,50:0.0,100:1.0,150:0.0,200:1.0,250:0.0,
300:1.0,350:0.0,400:1.0,450:0.0,500:1.0,550:0.2})
lives = self._player.gameData['lives']
if lives == 0: bs.gameTimer(600,self.updateForLives)
class PlayerSpaz_BTY(bs.PlayerSpaz):
def handleMessage(self, m):
if isinstance(m, bs.HitMessage):
if not self.node.exists():
return
if not self.isAlive():
return #We don't want to be hitting corpses!
srcSpaz = None
theGame = self.getActivity()
for theSpaz in theGame.spazList:
if theSpaz.getPlayer() == m.sourcePlayer:
srcSpaz = theSpaz
break
#print(["HitSrc", srcSpaz])
#print(["hitSpaz", self])
if not srcSpaz == self:
if not srcSpaz == None:
#We need to calculate new position for hit. Otherwise it won't
#actually hit the source spaz if he's across the screen
p1 = m.pos
p2 = self.node.position
p3 = srcSpaz.node.position
hit2spaz = [p2[0]-p1[0],p2[1]-p1[1], p2[2]-p1[2]]
m.pos = [p3[0]-hit2spaz[0], p3[1]-hit2spaz[1], p3[2]-hit2spaz[2]]
m.sourcePlayer = self.getPlayer()
#print(['sroucenode', m.srcNode])
#print(['pos', m.pos])
#print(['velocity', m.velocity])
#print(['magnitude',m.magnitude])
#print(['vMag', m.velocityMagnitude])
#print(['radisu', m.radius])
#print([m.sourcePlayer])
#print(['kickback', m.kickBack])
#print(['flat', m.flatDamage])
#print(['hittype', m.hitType])
#print(['forcedir', m.forceDirection])
#print(['Hitsubtype', m.hitSubType])
super(srcSpaz.__class__, srcSpaz).handleMessage(m)
#if isinstance(m, bs.ImpactDamageMessage):
#print(["impact", m.intensity])
#super(self.__class__, self).handleMessage(m)
else:
super(self.__class__, self).handleMessage(m)
class BackToYou(bs.TeamGameActivity):
@classmethod
def getName(cls):
return 'Back To You!'
@classmethod
def getScoreInfo(cls):
return {'scoreName':'Survived',
'scoreType':'seconds',
'noneIsWinner':False,
'lowerIsBetter':True}
@classmethod
def getDescription(cls,sessionType):
return 'Damage others to kill yourself! First one out wins!'
@classmethod
def supportsSessionType(cls,sessionType):
return True if (issubclass(sessionType,bs.TeamsSession)
or issubclass(sessionType,bs.FreeForAllSession)) else False
@classmethod
def getSupportedMaps(cls,sessionType):
return bs.getMapsSupportingPlayType("melee")
@classmethod
def getSettings(cls,sessionType):
settings = [("Lives Per Player",{'default':1,'minValue':1,'maxValue':10,'increment':1}),
("Time Limit",{'choices':[('None',0),('1 Minute',60),
('2 Minutes',120),('5 Minutes',300),
('10 Minutes',600),('20 Minutes',1200)],'default':0}),
("Respawn Times",{'choices':[('Shorter',0.25),('Short',0.5),('Normal',1.0),('Long',2.0),('Longer',4.0)],'default':1.0}),
("Epic Mode",{'default':False})]
if issubclass(sessionType,bs.TeamsSession):
settings.append(("Solo Mode",{'default':False}))
settings.append(("Balance Total Lives",{'default':False}))
return settings
def __init__(self,settings):
bs.TeamGameActivity.__init__(self,settings)
if self.settings['Epic Mode']: self._isSlowMotion = True
# show messages when players die since it's meaningful here
self.announcePlayerDeaths = True
try: self._soloMode = settings['Solo Mode']
except Exception: self._soloMode = False
self._scoreBoard = bs.ScoreBoard()
self.spazList = []
self.winners = []
def getInstanceDescription(self):
return 'First team out wins.' if isinstance(self.getSession(),bs.TeamsSession) else 'Damage others to kill yourself! First one out wins!'
def getInstanceScoreBoardDescription(self):
return 'first team out wins' if isinstance(self.getSession(),bs.TeamsSession) else 'Damage others to kill yourself! First one out wins!'
def onTransitionIn(self):
bs.TeamGameActivity.onTransitionIn(self, music='Epic' if self.settings['Epic Mode'] else 'Survival')
self._startGameTime = bs.getGameTime()
def onTeamJoin(self,team):
team.gameData['survivalSeconds'] = None
team.gameData['spawnOrder'] = []
def onPlayerJoin(self, player):
player.gameData['lives'] = self.settings['Lives Per Player']
if self._soloMode:
player.gameData['icons'] = []
player.getTeam().gameData['spawnOrder'].append(player)
self._updateSoloMode()
else:
# create our icon and spawn
player.gameData['icons'] = [Icon(player,position=(0,50),scale=0.8)]
if player.gameData['lives'] > 0:
self.spawnPlayer(player)
# dont waste time doing this until begin
if self.hasBegun():
self._updateIcons()
def _updateSoloMode(self):
# for both teams, find the first player on the spawn order list with lives remaining
# and spawn them if they're not alive
for team in self.teams:
# prune dead players from the spawn order
team.gameData['spawnOrder'] = [p for p in team.gameData['spawnOrder'] if p.exists()]
for player in team.gameData['spawnOrder']:
if player.gameData['lives'] > 0:
if not player.isAlive(): self.spawnPlayer(player)
break
def _updateIcons(self):
# in free-for-all mode, everyone is just lined up along the bottom
if isinstance(self.getSession(),bs.FreeForAllSession):
count = len(self.teams)
xOffs = 85
x = xOffs*(count-1) * -0.5
for i,team in enumerate(self.teams):
if len(team.players) == 1:
player = team.players[0]
for icon in player.gameData['icons']:
icon.setPositionAndScale((x,30),0.7)
icon.updateForLives()
x += xOffs
# in teams mode we split up teams
else:
if self._soloMode:
# first off, clear out all icons
for player in self.players:
player.gameData['icons'] = []
# now for each team, cycle through our available players adding icons
for team in self.teams:
if team.getID() == 0:
x = -60
xOffs = -78
else:
x = 60
xOffs = 78
isFirst = True
testLives = 1
while True:
playersWithLives = [p for p in team.gameData['spawnOrder'] if p.exists() and p.gameData['lives'] >= testLives]
if len(playersWithLives) == 0: break
for player in playersWithLives:
player.gameData['icons'].append(Icon(player,
position=(x,(40 if isFirst else 25)),
scale=1.0 if isFirst else 0.5,
nameMaxWidth=130 if isFirst else 75,
nameScale=0.8 if isFirst else 1.0,
flatness=0.0 if isFirst else 1.0,
shadow=0.5 if isFirst else 1.0,
showDeath=True if isFirst else False,
showLives=False))
x += xOffs * (0.8 if isFirst else 0.56)
isFirst = False
testLives += 1
# non-solo mode
else:
for team in self.teams:
if team.getID() == 0:
x = -50
xOffs = -85
else:
x = 50
xOffs = 85
for player in team.players:
for icon in player.gameData['icons']:
icon.setPositionAndScale((x,30),0.7)
icon.updateForLives()
x += xOffs
def _getSpawnPoint(self,player):
# in solo-mode, if there's an existing live player on the map, spawn at whichever
# spot is farthest from them (keeps the action spread out)
if self._soloMode:
livingPlayer = None
for team in self.teams:
for player in team.players:
if player.isAlive():
p = player.actor.node.position
livingPlayer = player
livingPlayerPos = p
break
if livingPlayer:
playerPos = bs.Vector(*livingPlayerPos)
points = []
for team in self.teams:
startPos = bs.Vector(*self.getMap().getStartPosition(team.getID()))
points.append([(startPos-playerPos).length(),startPos])
points.sort()
return points[-1][1]
else:
return None
else:
return None
def spawnPlayer(self,player):
"""This next line is the default spawn line. But we need to spawn our special guy"""
#self.spawnPlayerSpaz(player,self._getSpawnPoint(player))
#position = self._getSpawnPoint(player)
#if isinstance(self.getSession(), bs.TeamsSession):
# position = self.getMap().getStartPosition(player.getTeam().getID())
#else:
# # otherwise do free-for-all spawn locations
position = self.getMap().getFFAStartPosition(self.players)
angle = 20
#spaz = self.spawnPlayerSpaz(player)
# lets reconnect this player's controls to this
# spaz but *without* the ability to attack or pick stuff up
#spaz.connectControlsToPlayer(enablePunch=False,
# enableBomb=False,
# enablePickUp=False)
# also lets have them make some noise when they die..
#spaz.playBigDeathSound = True
name = player.getName()
lightColor = bsUtils.getNormalizedColor(player.color)
displayColor = bs.getSafeColor(player.color, targetIntensity=0.75)
spaz = PlayerSpaz_BTY(color=player.color,
highlight=player.highlight,
character=player.character,
player=player)
player.setActor(spaz)
#For some reason, I can't figure out how to get a list of all spaz.
#Therefore, I am making the list here so I can get which spaz belongs
#to the player supplied by HitMessage.
self.spazList.append(spaz)
# we want a bigger area-of-interest in co-op mode
# if isinstance(self.getSession(),bs.CoopSession): spaz.node.areaOfInterestRadius = 5.0
# else: spaz.node.areaOfInterestRadius = 5.0
# if this is co-op and we're on Courtyard or Runaround, add the material that allows us to
# collide with the player-walls
# FIXME; need to generalize this
if isinstance(self.getSession(), bs.CoopSession) and self.getMap().getName() in ['Courtyard', 'Tower D']:
mat = self.getMap().preloadData['collideWithWallMaterial']
spaz.node.materials += (mat,)
spaz.node.rollerMaterials += (mat,)
spaz.node.name = name
spaz.node.nameColor = displayColor
spaz.connectControlsToPlayer()
self.scoreSet.playerGotNewSpaz(player, spaz)
# move to the stand position and add a flash of light
spaz.handleMessage(bs.StandMessage(position, angle if angle is not None else random.uniform(0, 360)))
t = bs.getGameTime()
bs.playSound(self._spawnSound, 1, position=spaz.node.position)
light = bs.newNode('light', attrs={'color': lightColor})
spaz.node.connectAttr('position', light, 'position')
bsUtils.animate(light, 'intensity', {0: 0, 250: 1, 500: 0})
bs.gameTimer(500, light.delete)
#Start code to spawn special guy:
#End of code to spawn special guy
if not self._soloMode:
bs.gameTimer(300,bs.Call(self._printLives,player))
# if we have any icons, update their state
for icon in player.gameData['icons']:
icon.handlePlayerSpawned()
def _printLives(self,player):
if not player.exists() or not player.isAlive(): return
try: pos = player.actor.node.position
except Exception,e:
print 'EXC getting player pos in bsElim',e
return
bs.PopupText('x'+str(player.gameData['lives']-1),color=(1,1,0,1),
offset=(0,-0.8,0),randomOffset=0.0,scale=1.8,position=pos).autoRetain()
def onPlayerLeave(self,player):
bs.TeamGameActivity.onPlayerLeave(self,player)
player.gameData['icons'] = None
if player in self.winners:
self.winners.remove(player)
# remove us from spawn-order
if self._soloMode:
if player in player.getTeam().gameData['spawnOrder']:
player.getTeam().gameData['spawnOrder'].remove(player)
# update icons in a moment since our team will be gone from the list then
bs.gameTimer(0, self._updateIcons)
def onBegin(self):
bs.TeamGameActivity.onBegin(self)
self.setupStandardTimeLimit(self.settings['Time Limit'])
self.setupStandardPowerupDrops()
if self._soloMode:
self._vsText = bs.NodeActor(bs.newNode("text",
attrs={'position':(0,105),
'hAttach':"center",
'hAlign':'center',
'maxWidth':200,
'shadow':0.5,
'vrDepth':390,
'scale':0.6,
'vAttach':"bottom",
'color':(0.8,0.8,0.3,1.0),
'text':bs.Lstr(resource='vsText')}))
# if balance-team-lives is on, add lives to the smaller team until total lives match
if (isinstance(self.getSession(),bs.TeamsSession)
and self.settings['Balance Total Lives']
and len(self.teams[0].players) > 0
and len(self.teams[1].players) > 0):
if self._getTotalTeamLives(self.teams[0]) < self._getTotalTeamLives(self.teams[1]):
lesserTeam = self.teams[0]
greaterTeam = self.teams[1]
else:
lesserTeam = self.teams[1]
greaterTeam = self.teams[0]
addIndex = 0
while self._getTotalTeamLives(lesserTeam) < self._getTotalTeamLives(greaterTeam):
lesserTeam.players[addIndex].gameData['lives'] += 1
addIndex = (addIndex + 1) % len(lesserTeam.players)
self._updateIcons()
# we could check game-over conditions at explicit trigger points,
# but lets just do the simple thing and poll it...
bs.gameTimer(1000, self._update, repeat=True)
def _getTotalTeamLives(self,team):
return sum(player.gameData['lives'] for player in team.players)
def handleMessage(self,m):
if isinstance(m,bs.PlayerSpazDeathMessage):
bs.TeamGameActivity.handleMessage(self, m) # augment standard behavior
player = m.spaz.getPlayer()
respawnPoints = None
print([player, m.spaz.hitPoints, "killed by", m.killerPlayer])
if m.killerPlayer is None:
pass #Don't take away a life for non-violent death
elif m.killerPlayer == m.spaz.getPlayer():
pass #No credit for suicide!
elif m.spaz.hitPoints > 0: #Spaz died, but had positive hit points. Probably fell. Take points from player.
#tossing or knocking off a player respawns them w/o taking life.
print([player, "died from fall.", m.spaz.hitPoints])
pass
else:
player.gameData['lives'] -= 1
#Remove this spaz from the list of active spazzes
if m.spaz in self.spazList: self.spazList.remove(m.spaz)
if player.gameData['lives'] < 0:
bs.printError('Got lives < 0 in Elim; this shouldnt happen. solo:'+str(self._soloMode))
player.gameData['lives'] = 0
# if we have any icons, update their state
for icon in player.gameData['icons']:
icon.handlePlayerDied()
# play big death sound on our last death or for every one in solo mode
if self._soloMode or player.gameData['lives'] == 0:
bs.playSound(bs.Spaz.getFactory().singlePlayerDeathSound)
# if we hit zero lives, we're dead (and our team might be too)
if player.gameData['lives'] == 0:
# if the whole team is now dead, mark their survival time..
#if all(teammate.gameData['lives'] == 0 for teammate in player.getTeam().players):
if self._getTotalTeamLives(player.getTeam()) == 0:
player.getTeam().gameData['survivalSeconds'] = (bs.getGameTime()-self._startGameTime)/1000
self.winners.append(player)
else:
# otherwise, in regular mode, respawn..
if not self._soloMode:
self.respawnPlayer(player)
# in solo, put ourself at the back of the spawn order
if self._soloMode:
player.getTeam().gameData['spawnOrder'].remove(player)
player.getTeam().gameData['spawnOrder'].append(player)
else:
bs.TeamGameActivity.handleMessage(self, m)
def _update(self):
if self._soloMode:
# for both teams, find the first player on the spawn order list with lives remaining
# and spawn them if they're not alive
for team in self.teams:
# prune dead players from the spawn order
team.gameData['spawnOrder'] = [p for p in team.gameData['spawnOrder'] if p.exists()]
for player in team.gameData['spawnOrder']:
if player.gameData['lives'] > 0:
if not player.isAlive():
self.spawnPlayer(player)
self._updateIcons()
break
# if we're down to 1 or fewer living teams, start a timer to end the game
# (allows the dust to settle and draws to occur if deaths are close enough)
if (len(self._getLivingTeams()) < 2) or len(self.winners) > 2:
self._roundEndTimer = bs.Timer(500,self.endGame)
def _getLivingTeams(self):
return [team for team in self.teams if len(team.players) > 0 and any(player.gameData['lives'] > 0 for player in team.players)]
def endGame(self):
if self.hasEnded(): return
results = bs.TeamGameResults()
self._vsText = None # kill our 'vs' if its there
for team in self.teams:
results.setTeamScore(team, team.gameData['survivalSeconds'])
self.end(results=results)
================================================
FILE: mods/Basketball.json
================================================
{
"name": "Basketball",
"author": "MattZ45986",
"category": "minigames"
}
================================================
FILE: mods/Basketball.py
================================================
#Basketball
import bs
import bsUtils
import math
import random
# This game is played with the same rules as the classic American sport, Bombsquad style!
# Featuring: a hoop, fouls, foul shots, jump-balls, three-pointers, a referee, and two teams ready to duke it out.
# Dedicated to - David
def bsGetAPIVersion():
return 4
def bsGetGames():
return [Basketball]
class ImpactMessage(object):
pass
class Referee(bs.SpazBot):
character = 'Bernard'
chargeDistMax = 9999
throwDistMin = 9999
throwDistMax = 9999
color=(0,0,0)
highlight=(1,1,1)
punchiness = 0.0
chargeSpeedMin = 0.0
chargeSpeedMax = 0.0
class Hoop(bs.Actor):
def __init__(self,position=(0,5,-8),color=(1,1,1)):
self._r1 = 0.7
self._rFudge = 0.15
bs.Actor.__init__(self)
self._position = bs.Vector(*position)
self.color = color
p1 = position
p2 = (position[0]+1,position[1],position[2])
p3 = (position[0]-1,position[1],position[2])
showInSpace = False
self._hit = False
n1 = bs.newNode('locator',attrs={'shape':'circle','position':p1,
'color':self.color,'opacity':0.5,
'drawBeauty':showInSpace,'additive':True})
n2 = bs.newNode('locator',attrs={'shape':'circle','position':p2,
'color':self.color,'opacity':0.5,
'drawBeauty':showInSpace,'additive':True})
n3 = bs.newNode('locator',attrs={'shape':'circle','position':p3,
'color':self.color,'opacity':0.5,
'drawBeauty':showInSpace,'additive':True})
n4 = bs.newNode('light',attrs={'color':self.color,'position':p1,'intensity':.5})
bs.animateArray(n1,'size',1,{0:[0.0],200:[self._r1*2.0]})
bs.animateArray(n2,'size',1,{0:[0.0],200:[self._r1*2.0]})
bs.animateArray(n3,'size',1,{0:[0.0],200:[self._r1*2.0]})
self._nodes = [n1,n2,n3,n4]
class ThreePointLine(bs.Actor):
def __init__(self):
bs.Actor.__init__(self)
r1 = 6
n1 = bs.newNode('locator',attrs={'shape':'circleOutline','position':(0,4,-8),'color':(1,1,1),'opacity':.3,'drawBeauty':False,'additive':True})
self._nodes = [n1]
bs.animateArray(n1,'size',1,{50:[0.0],250:[r1*2.0]})
class BasketBallFactory(bs.BombFactory):
def __init__(self):
self.basketBallMaterial = bs.Material()
self.basketBallMaterial.addActions(conditions=(('weAreOlderThan',200),
'and',('theyAreOlderThan',200),
'and',('evalColliding',),
'and',(('theyHaveMaterial',bs.getSharedObject('footingMaterial')),
'or',('theyHaveMaterial',bs.getSharedObject('objectMaterial')))),
actions=(('message','ourNode','atConnect',ImpactMessage())))
bs.BombFactory.__init__(self)
class Baller(bs.PlayerSpaz):
def onBombPress(self):
pass
def onPickUpPress(self):
bs.PlayerSpaz.onPickUpPress(self)
self.node.getDelegate()._pos = self.node.positionCenter
class BasketBomb(bs.Bomb):
def __init__(self,position=(0,1,0),velocity=(0,0,0),bombType='normal',blastRadius=2.0,sourcePlayer=None,owner=None):
bs.Actor.__init__(self)
self.up = False
factory = BasketBallFactory()
self.bombType = 'basketball'
self._exploded = False
self.blastRadius = blastRadius
self._explodeCallbacks = []
self.sourcePlayer = sourcePlayer
self.hitType = 'impact'
self.hitSubType = 'basketball'
owner = bs.Node(None)
self.owner = owner
materials = (factory.bombMaterial, bs.getSharedObject('objectMaterial'))
materials = materials + (factory.normalSoundMaterial,)
materials = materials + (factory.basketBallMaterial,)
self.node = bs.newNode('prop',
delegate=self,
attrs={'position':position,
'velocity':velocity,
'body':'sphere',
'model':factory.bombModel,
'shadowSize':0.3,
'colorTexture':bs.getTexture('bonesColorMask'),
'reflection':'soft',
'reflectionScale':[1.5],
'materials':materials})
bsUtils.animate(self.node,"modelScale",{0:0, 200:1.3, 260:1})
def handleMessage(self, m):
if isinstance(m, bs.OutOfBoundsMessage):
self.getActivity().respawnBall((not self.getActivity().possession))
bs.Bomb.handleMessage(self, m)
elif isinstance(m, bs.PickedUpMessage):
self.heldLast = m.node.getDelegate().getPlayer()
self.getActivity().heldLast = self.heldLast
if self.heldLast in self.getActivity().teams[0].players: self.getActivity().possession = True
else: self.getActivity().possession = False
bs.Bomb.handleMessage(self, m)
if self.up == True:
activity = self.getActivity()
bs.gameTimer(3000,bs.WeakCall(activity.jumpBall))
self.up = True
elif isinstance(m, ImpactMessage): self.getActivity().handleShot(self)
elif isinstance(m, bs.DroppedMessage): self.up = False
else: bs.Bomb.handleMessage(self, m)
class Basketball(bs.TeamGameActivity):
@classmethod
def getName(cls):
return "Basketball"
@classmethod
def getDescription(cls, sessionType):
return "A classic sport, Bombsquad style!"
@classmethod
def getScoreInfo(cls):
return{'scoreType':'points'}
@classmethod
def getSettings(cls, sessionType):
return [("Epic Mode", {'default': False}),
("Enable Running", {'default': True}),
("Enable Jumping", {'default': True}),
("Play To: ", {
'choices': [
('1 point', 1),
('11 points', 11),
('21 points', 21),
('45 points', 45),
('100 points', 100)
],
'default': 21})]
@classmethod
def getSupportedMaps(cls, sessionType):
return ['Courtyard']
@classmethod
def supportsSessionType(cls, sessionType):
return True if issubclass(sessionType, bs.TeamsSession) else False
def __init__(self,settings):
bs.TeamGameActivity.__init__(self,settings)
if self.settings['Epic Mode']: self._isSlowMotion = True
self.info = bs.NodeActor(bs.newNode('text',
attrs={'vAttach': 'bottom',
'hAlign': 'center',
'vrDepth': 0,
'color': (0,.2,0),
'shadow': 1.0,
'flatness': 1.0,
'position': (0,0),
'scale': 0.8,
'text': "Created by MattZ45986 on Github",
}))
self.possession = True
self.heldLast = None
self.fouled = False
self.firstFoul = False
self.jb = True
self.blueBench = bs.newNode('light', attrs={
'color':(0,0,1),'intensity':1,'position':(-6.5,0,-2)})
self.redBench = bs.newNode('light', attrs={
'color':(1,0,0),'intensity':1,'position':(6.5,0,-2)})
self._bots = bs.BotSet()
self.hoop = Hoop((0,5,-8), (1,1,1))
self.threePointLine = ThreePointLine().autoRetain()
self._scoredis = bs.ScoreBoard()
self.referee = Referee
bs.gameTimer(10,bs.Call(self._bots.spawnBot,self.referee,pos=(-6,3,-6),spawnTime=1))
def onTransitionIn(self):
bs.TeamGameActivity.onTransitionIn(self,music='Sports')
def onBegin(self):
bs.TeamGameActivity.onBegin(self)
s = self.settings
for player in self.players:
player.actor.connectControlsToPlayer(enableBomb=False, enableRun = s["Enable Running"], enableJump = s["Enable Jumping"])
player.sessionData['fouls'] = 0
self.respawnBall(None)
self.teams[0].gameData['score'] = 0
self.teams[1].gameData['score'] = 0
self._scoredis.setTeamValue(self.teams[0],self.teams[1].gameData['score'])
self._scoredis.setTeamValue(self.teams[1],self.teams[1].gameData['score'])
self.updateScore()
self.checkEnd()
def spawnPlayerSpaz(self,player,position=(0,5,-3),angle=None, killedDuringFoulShots = False):
name = player.getName()
color = player.color
highlight = player.highlight
spaz = Baller(color=color,
highlight=highlight,
character=player.character,
player=player)
player.setActor(spaz)
if player in self.teams[0].players: position = (-6.5,3.2,(random.random()*5)-4.5)
else: position = (6.5,3.2,(random.random()*5)-4.5)
if self.fouled == True and killedDuringFoulShots == False: position = (0,3.2,-3)
s = self.settings
player.actor.connectControlsToPlayer(enableBomb=False, enableRun = s["Enable Running"], enableJump = s["Enable Jumping"])
spaz.handleMessage(bs.StandMessage(position,90))
def respawnBall(self, owner):
if owner == True:
self.basketball = BasketBomb(position=(-6,5,-3)).autoRetain()
elif owner == False:
self.basketball = BasketBomb(position=(6,5,-3)).autoRetain()
else:
self.basketball = BasketBomb(position=(0,5,-2.5)).autoRetain()
def handleMessage(self, m):
if isinstance(m, bs.SpazBotDeathMessage):
if m.killerPlayer in self.teams[0].players:
results = bs.TeamGameResults()
results.setTeamScore(self.teams[0],0)
results.setTeamScore(self.teams[1],100)
self.end(results=results)
bs.screenMessage("Don't take it out on the ref!", color=(1,0,0))
elif m.killerPlayer in self.teams[1].players:
results = bs.TeamGameResults()
results.setTeamScore(self.teams[1],0)
results.setTeamScore(self.teams[0],100)
self.end(results=results)
bs.screenMessage("Don't take it out on the ref!", color=(0,0,1))
elif isinstance(m, bs.PlayerSpazDeathMessage):
if m.killed:
if m.spaz.getPlayer() in self.teams[0].players:
team = self.teams[0]
elif m.spaz.getPlayer() in self.teams[1].players: team = self.teams[1]
if m.killerPlayer not in team.players:
m.killerPlayer.sessionData['fouls'] += 1
m.killerPlayer.actor.setScoreText("FOUL " + str(m.killerPlayer.sessionData['fouls']))
bs.playSound(bs.getSound('bearDeath'))
if m.killerPlayer.sessionData['fouls'] == 3: self.foulOut(m.killerPlayer)
if self.fouled == True:
self.spawnPlayerSpaz(player=m.spaz.getPlayer(),killedDuringFoulShots=True)
return
self.fouled = True
self.giveFoulShots(m.spaz)
elif m.spaz.getPlayer().sessionData['fouls'] < 3: self.respawnPlayer(m.spaz.getPlayer())
elif m.spaz.getPlayer().sessionData['fouls'] < 3: self.respawnPlayer(m.spaz.getPlayer())
s = self.settings
else: bs.TeamGameActivity.handleMessage(self, m)
def giveFoulShots(self, player):
for p in self.players:
p.actor.disconnectControlsFromPlayer()
if p in self.teams[0].players and p != player: p.actor.node.handleMessage('stand',-6.5,3.2,(random.random()*5)-4.5, 0)
if p in self.teams[1].players and p != player: p.actor.node.handleMessage('stand',6.5,3.2,(random.random()*5)-4.5, 0)
self.spawnPlayerSpaz(player.getPlayer())
name = player.getPlayer().getName()
for p in self.players:
if p.getName() == name:
player = p.actor
s = self.settings
player.connectControlsToPlayer(enableBomb=False, enableRun = s["Enable Running"], enableJump = s["Enable Jumping"],enablePunch = False)
self.firstFoul = True
self.basketball.node.delete()
self.respawnBall(None)
sound = bs.getSound('announceTwo')
bs.gameTimer(1000, bs.Call(bs.playSound,sound))
player.node.handleMessage('stand',0,3.2,-3, 0)
player.onPickUpPress()
player.onPickUpRelease()
player.setScoreText("5 seconds to shoot")
bs.gameTimer(6000, bs.Call(self.continueFoulShots,player))
def continueFoulShots(self, player):
if self.basketball.node.exists(): self.basketball.node.delete()
self.firstFoul = False
player.node.handleMessage('stand',0,3.2,-3, 0)
self.respawnBall(None)
bs.playSound(bs.getSound('announceOne'))
player.onPickUpPress()
player.onPickUpRelease()
bs.playSound(bs.getSound('bear1'))
player.setScoreText("5 seconds to shoot")
bs.gameTimer(6000, bs.Call(self.continuePlay))
def continuePlay(self):
self.fouled = False
if self.basketball.node.exists(): self.basketball.node.delete()
self.respawnBall(not self.possession)
s = self.settings
for player in self.players:
player.actor.connectControlsToPlayer(enableBomb=False, enableRun = s["Enable Running"], enableJump = s["Enable Jumping"], enablePunch = True)
if player in self.teams[0].players:
player.actor.node.handleMessage('stand',-6.5,3.2,(random.random()*5)-4.5, 0)
elif player in self.teams[1].players:
player.actor.node.handleMessage('stand',6.5,3.2,(random.random()*5)-4.5, 0)
def foulOut(self, player):
player.actor.shatter()
player.actor.setScoreText("FOULED OUT")
def jumpBall(self):
ball = self.basketball
if ball.up == True:
self.basketball.heldLast.actor.setScoreText("Jump Ball")
for player in self.teams[0].players:
player.actor.node.handleMessage('stand',-6.5,3.2,(random.random()*5)-4.5, 0)
for player in self.teams[1].players:
player.actor.node.handleMessage('stand',6.5,3.2,(random.random()*5)-4.5, 0)
ball.node.delete()
self.respawnBall(not self.jb)
self.jb = not self.jb
def handleShot(self, ball):
if ball.node.position[0] > -1.5 and ball.node.position[0] < 1.5:
if ball.node.position[1] > 4 and ball.node.position[1] < 5:
if ball.node.position[2] > -9 and ball.node.position[2] < -8:
if self.isTendingGoal(ball):
ball.node.delete()
self.respawnBall(not self.possession)
bs.playSound(bs.getSound('bearDeath'))
ball.heldLast.actor.shatter()
return
bs.playSound(bs.getSound('bear' +str(random.randint(1,4))))
for node in self.hoop._nodes:
node.delete()
self.hoop = None
if not self.fouled:
if self.possession:
pts = self.checkThreePoint(ball)
self.teams[0].gameData['score'] += pts
ball.heldLast.actor.setScoreText(str(pts) + " Points")
self.hoop = Hoop((0,5,-8),(0,0,1))
for player in self.teams[0].players:
player.actor.node.handleMessage('stand',-6.5,3.2,(random.random()*5)-4.5, 0)
else:
pts = self.checkThreePoint(ball)
self.teams[1].gameData['score'] += pts
ball.heldLast.actor.setScoreText(str(pts) + " Points")
self.hoop = Hoop((0,5,-8),(1,0,0))
for player in self.teams[1].players:
player.actor.node.handleMessage('stand',6.5,3.2,(random.random()*5)-4.5, 0)
self.updateScore()
ball.node.delete()
self.respawnBall(not self.possession)
else:
if self.possession:
self.hoop = Hoop((0,5,-8),(0,0,1))
self.teams[0].gameData['score'] += 1
else:
self.hoop = Hoop((0,5,-8),(1,0,0))
self.teams[1].gameData['score'] += 1
ball.heldLast.actor.setScoreText("1 Point")
self.updateScore()
ball.node.delete()
def checkThreePoint(self, ball):
pos = ball.heldLast.actor._pos
if pos[0]*pos[0] + (pos[2]+8)*(pos[2]+8) >= 36: return 3
else: return 2
def isTendingGoal(self,ball):
pos = ball.heldLast.actor._pos
if pos[0] > -1.5 and pos[0] < 1.5:
if pos[2] > -9 and pos[2] < -8: return True
return False
def updateScore(self):
for team in self.teams:
self._scoredis.setTeamValue(team,team.gameData['score'])
self.checkEnd()
def checkEnd(self):
for team in self.teams:
i = 0
if team.gameData['score'] >= self.settings['Play To: ']: self.endGame()
for player in team.players:
if player.isAlive(): i = 1
if i == 0: self.endGame()
def endGame(self):
results = bs.TeamGameResults()
for team in self.teams:
results.setTeamScore(team, team.gameData['score'])
i = 0
for player in team.players:
if player.isAlive(): i = 1
if i == 0: results.setTeamScore(team, 0)
self.end(results=results)
================================================
FILE: mods/BuddyBunny.json
================================================
{
"name": "Buddy Bunny powerup",
"author": "joshville79",
"category": "libraries"
}
================================================
FILE: mods/BuddyBunny.py
================================================
import bsSpaz
import bs
import bsUtils
import weakref
import random
class BunnyBuddyBot(bsSpaz.SpazBot):
"""
category: Bot Classes
A speedy attacking melee bot.
"""
color=(1,1,1)
highlight=(1.0,0.5,0.5)
character = 'Easter Bunny'
punchiness = 1.0
run = True
bouncy = True
defaultBoxingGloves = True
chargeDistMin = 1.0
chargeDistMax = 9999.0
chargeSpeedMin = 1.0
chargeSpeedMax = 1.0
throwDistMin = 3
throwDistMax = 6
pointsMult = 2
def __init__(self,player):
"""
Instantiate a spaz-bot.
"""
self.color = player.color
self.highlight = player.highlight
bsSpaz.Spaz.__init__(self,color=self.color,highlight=self.highlight,character=self.character,
sourcePlayer=None,startInvincible=False,canAcceptPowerups=False)
# if you need to add custom behavior to a bot, set this to a callable which takes one
# arg (the bot) and returns False if the bot's normal update should be run and True if not
self.updateCallback = None
self._map = weakref.ref(bs.getActivity().getMap())
self.lastPlayerAttackedBy = None # FIXME - should use empty player-refs
self.lastAttackedTime = 0
self.lastAttackedType = None
self.targetPointDefault = None
self.heldCount = 0
self.lastPlayerHeldBy = None # FIXME - should use empty player-refs here
self.targetFlag = None
self._chargeSpeed = 0.5*(self.chargeSpeedMin+self.chargeSpeedMax)
self._leadAmount = 0.5
self._mode = 'wait'
self._chargeClosingIn = False
self._lastChargeDist = 0.0
self._running = False
self._lastJumpTime = 0
class BunnyBotSet(bsSpaz.BotSet):
"""
category: Bot Classes
A container/controller for one or more bs.SpazBots.
"""
def __init__(self, sourcePlayer):
"""
Create a bot-set.
"""
# we spread our bots out over a few lists so we can update them in a staggered fashion
self._botListCount = 5
self._botAddList = 0
self._botUpdateList = 0
self._botLists = [[] for i in range(self._botListCount)]
self._spawnSound = bs.getSound('spawn')
self._spawningCount = 0
self.startMovingBunnies()
self.sourcePlayer = sourcePlayer
def doBunny(self):
self.spawnBot(BunnyBuddyBot, self.sourcePlayer.actor.node.position, 2000, self.setupBunny)
def startMovingBunnies(self):
self._botUpdateTimer = bs.Timer(50,bs.WeakCall(self._bUpdate),repeat=True)
def _spawnBot(self,botType,pos,onSpawnCall):
spaz = botType(self.sourcePlayer)
bs.playSound(self._spawnSound,position=pos)
spaz.node.handleMessage("flash")
spaz.node.isAreaOfInterest = 0
spaz.handleMessage(bs.StandMessage(pos,random.uniform(0,360)))
self.addBot(spaz)
self._spawningCount -= 1
if onSpawnCall is not None: onSpawnCall(spaz)
def _bUpdate(self):
# update one of our bot lists each time through..
# first off, remove dead bots from the list
# (we check exists() here instead of dead.. we want to keep them around even if they're just a corpse)
try:
botList = self._botLists[self._botUpdateList] = [b for b in self._botLists[self._botUpdateList] if b.exists()]
except Exception:
bs.printException("error updating bot list: "+str(self._botLists[self._botUpdateList]))
self._botUpdateList = (self._botUpdateList+1)%self._botListCount
# update our list of player points for the bots to use
playerPts = []
try:
#if player.isAlive() and not (player is self.sourcePlayer):
# playerPts.append((bs.Vector(*player.actor.node.position),
# bs.Vector(*player.actor.node.velocity)))
for n in bs.getNodes():
if n.getNodeType() == 'spaz':
s = n.getDelegate()
if isinstance(s,bsSpaz.SpazBot):
if not s in self.getLivingBots():
if hasattr(s, 'sourcePlayer'):
if not s.sourcePlayer is self.sourcePlayer:
playerPts.append((bs.Vector(*n.position), bs.Vector(*n.velocity)))
else:
playerPts.append((bs.Vector(*n.position), bs.Vector(*n.velocity)))
elif isinstance(s, bsSpaz.PlayerSpaz):
if not (s.getPlayer() is self.sourcePlayer):
playerPts.append((bs.Vector(*n.position), bs.Vector(*n.velocity)))
except Exception:
bs.printException('error on bot-set _update')
for b in botList:
b._setPlayerPts(playerPts)
b._updateAI()
def setupBunny(self, spaz):
spaz.sourcePlayer = self.sourcePlayer
spaz.color = self.sourcePlayer.color
spaz.highlight = self.sourcePlayer.highlight
self.setBunnyText(spaz)
def setBunnyText(self, spaz):
m = bs.newNode('math', owner=spaz.node, attrs={'input1': (0, 0.7, 0), 'operation': 'add'})
spaz.node.connectAttr('position', m, 'input2')
spaz._bunnyText = bs.newNode('text',
owner=spaz.node,
attrs={'text':self.sourcePlayer.getName(),
'inWorld':True,
'shadow':1.0,
'flatness':1.0,
'color':self.sourcePlayer.color,
'scale':0.0,
'hAlign':'center'})
m.connectAttr('output', spaz._bunnyText, 'position')
bs.animate(spaz._bunnyText, 'scale', {0: 0.0, 1000: 0.01})
================================================
FILE: mods/Collector.json
================================================
{
"name": "Collector",
"author": "TheMikirog",
"category": "minigames"
}
================================================
FILE: mods/Collector.py
================================================
import bs
import random
import bsUtils
import weakref
'''
Gamemode: Collector
Creator: TheMikirog
Website: https://bombsquadjoyride.blogspot.com/
This is a gamemode purely made by me just to spite unchallenged modders out there that put out crap to the market.
We don't want gamemodes that are just the existing ones with some novelties! Gamers deserve more!
In this gamemode you have to kill others in order to get their Capsules. Capsules can be collected and staked in your inventory, how many as you please.
After you kill an enemy that carries some of them, they drop a respective amount of Capsules they carried + two more.
Your task is to collect these Capsules, get to the flag and score them KOTH style. You can't score if you don't have any Capsules with you.
The first player or team to get to the required ammount wins.
This is a gamemode all about trying to stay alive and picking your battles in order to win. A rare skill in BombSquad, where everyone is overly aggressive.
'''
# scripts specify an API-version they were written against
# so the game knows to ignore out-of-date ones.
def bsGetAPIVersion():
return 4
# how BombSquad asks us what games we provide
def bsGetGames():
return [CollectorGame]
class CollectorGame(bs.TeamGameActivity):
tips = ['Making you opponent fall down the pit makes his Capsules wasted!\nTry not to kill enemies by throwing them off the cliff.',
'Don\'t be too reckless. You can lose your loot quite quickly!',
'Don\'t let the leading player score his Capsules at the Deposit Point!\nTry to catch him if you can!',
'Lucky Capsules give 4 to your inventory and they have 8% chance of spawning after kill!',
'Don\t camp in one place! Make your move first, so hopefully you get some dough!']
FLAG_NEW = 0
FLAG_UNCONTESTED = 1
FLAG_CONTESTED = 2
FLAG_HELD = 3
@classmethod
def getName(cls):
return 'Collector'
@classmethod
def getDescription(cls,sessionType):
return ('Kill your opponents to steal their Capsules.\n'
'Collect them and score at the Deposit point!')
def onBegin(self):
bs.TeamGameActivity.onBegin(self)
self.setupStandardTimeLimit(self.settings['Time Limit'])
self.setupStandardPowerupDrops()
if len(self.teams) > 0:
self._scoreToWin = self.settings['Capsules to Collect'] * max(1,max(len(t.players) for t in self.teams))
else: self._scoreToWin = self.settings['Capsules to Collect']
self._updateScoreBoard()
self._dingSound = bs.getSound('dingSmall')
if isinstance(bs.getActivity().getSession(),bs.FreeForAllSession):
self._flagNumber = random.randint(0,1)
self._flagPos = self.getMap().getFlagPosition(self._flagNumber)
else: self._flagPos = self.getMap().getFlagPosition(None)
bs.gameTimer(1000,self._tick,repeat=True)
self._flagState = self.FLAG_NEW
self.projectFlagStand(self._flagPos)
self._flag = bs.Flag(position=self._flagPos,
touchable=False,
color=(1,1,1))
self._flagLight = bs.newNode('light',
attrs={'position':self._flagPos,
'intensity':0.2,
'heightAttenuated':False,
'radius':0.4,
'color':(0.2,0.2,0.2)})
# flag region
bs.newNode('region',
attrs={'position':self._flagPos,
'scale': (1.8,1.8,1.8),
'type': 'sphere',
'materials':[self._flagRegionMaterial,bs.getSharedObject('regionMaterial')]})
self._updateFlagState()
@classmethod
def supportsSessionType(cls,sessionType):
return True if (issubclass(sessionType,bs.TeamsSession)
or issubclass(sessionType,bs.FreeForAllSession)) else False
@classmethod
def getSupportedMaps(cls,sessionType):
return bs.getMapsSupportingPlayType("keepAway")
@classmethod
def getSettings(cls,sessionType):
settings = [("Capsules to Collect",{'minValue':1,'default':10,'increment':1}),
("Capsules on Death",{'minValue':1,'maxValue':10,'default':2,'increment':1}),
("Time Limit",{'choices':[('None',0),('1 Minute',60),
('2 Minutes',120),('5 Minutes',300),
('10 Minutes',600),('20 Minutes',1200)],'default':0}),
("Respawn Times",{'choices':[('Shorter',0.25),('Short',0.5),('Normal',1.0),('Long',2.0),('Longer',4.0)],'default':1.0}),
("Allow Lucky Capsules",{'default':True}),
("Epic Mode",{'default':False})]
return settings
def __init__(self,settings):
bs.TeamGameActivity.__init__(self,settings)
if self.settings['Epic Mode']: self._isSlowMotion = True
# print messages when players die since it matters here..
self.announcePlayerDeaths = True
self._scoreBoard = bs.ScoreBoard()
self._swipSound = bs.getSound("swip")
self._tickSound = bs.getSound('tick')
self._scoreToWin = self.settings['Capsules to Collect']
self._capsuleModel = bs.getModel('bomb')
self._capsuleTex = bs.getTexture('bombColor')
self._capsuleLuckyTex = bs.getTexture('bombStickyColor')
self._collectSound = bs.getSound('powerup01')
self._luckyCollectSound = bs.getSound('cashRegister2')
self._capsuleMaterial = bs.Material()
self._capsuleMaterial.addActions(conditions=("theyHaveMaterial",bs.getSharedObject('playerMaterial')),
actions=(("call","atConnect",self._onCapsulePlayerCollide),))
self._capsules = []
self._flagRegionMaterial = bs.Material()
self._flagRegionMaterial.addActions(conditions=("theyHaveMaterial",bs.getSharedObject('playerMaterial')),
actions=(("modifyPartCollision","collide",True),
("modifyPartCollision","physical",False),
("call","atConnect",bs.Call(self._handlePlayerFlagRegionCollide,1)),
("call","atDisconnect",bs.Call(self._handlePlayerFlagRegionCollide,0))))
def getInstanceDescription(self):
return ('Score ${ARG1} capsules from your enemies.',self._scoreToWin)
def getInstanceScoreBoardDescription(self):
return ('collect ${ARG1} capsules',self._scoreToWin)
def onTeamJoin(self,team):
team.gameData['capsules'] = 0
self._updateScoreBoard()
def onPlayerJoin(self,player):
bs.TeamGameActivity.onPlayerJoin(self,player)
player.gameData['atFlag'] = 0
player.gameData['capsules'] = 0
def spawnPlayer(self,player):
spaz = self.spawnPlayerSpaz(player)
spaz.connectControlsToPlayer()
player.gameData['capsules'] = 0
def _tick(self):
self._updateFlagState()
scoringTeam = None if self._scoringTeam is None else self._scoringTeam()
# give holding players points
for player in self.players:
if player.gameData['atFlag'] > 0 and player.gameData['capsules'] > 0 and self._flagState == self.FLAG_HELD and scoringTeam.gameData['capsules'] < self._scoreToWin:
player.gameData['capsules'] -= 1
self._handleCapsuleStorage((self._flagPos[0],self._flagPos[1]+1,self._flagPos[2]),player)
self.scoreSet.playerScored(player,3,screenMessage=False,display=False)
if scoringTeam:
if scoringTeam.gameData['capsules'] < self._scoreToWin: bs.playSound(self._tickSound)
scoringTeam.gameData['capsules'] = max(0,scoringTeam.gameData['capsules']+1)
self._updateScoreBoard()
if scoringTeam.gameData['capsules'] > 0:
self._flag.setScoreText(str(self._scoreToWin-scoringTeam.gameData['capsules']))
# winner
if scoringTeam.gameData['capsules'] >= self._scoreToWin:
self.endGame()
def endGame(self):
results = bs.TeamGameResults()
for team in self.teams: results.setTeamScore(team,team.gameData['capsules'])
self.end(results=results,announceDelay=0)
def _updateFlagState(self):
holdingTeams = set(player.getTeam() for player in self.players if player.gameData['atFlag'])
prevState = self._flagState
if len(holdingTeams) > 1:
self._flagState = self.FLAG_CONTESTED
self._scoringTeam = None
self._flagLight.color = (0.6,0.6,0.1)
self._flag.node.color = (1.0,1.0,0.4)
elif len(holdingTeams) == 1:
holdingTeam = list(holdingTeams)[0]
self._flagState = self.FLAG_HELD
self._scoringTeam = weakref.ref(holdingTeam)
self._flagLight.color = bs.getNormalizedColor(holdingTeam.color)
self._flag.node.color = holdingTeam.color
else:
self._flagState = self.FLAG_UNCONTESTED
self._scoringTeam = None
self._flagLight.color = (0.2,0.2,0.2)
self._flag.node.color = (1,1,1)
if self._flagState != prevState:
bs.playSound(self._swipSound)
def _handlePlayerFlagRegionCollide(self,colliding):
flagNode,playerNode = bs.getCollisionInfo("sourceNode","opposingNode")
try: player = playerNode.getDelegate().getPlayer()
except Exception: return
# different parts of us can collide so a single value isn't enough
# also don't count it if we're dead (flying heads shouldnt be able to win the game :-)
if colliding and player.isAlive(): player.gameData['atFlag'] += 1
else: player.gameData['atFlag'] = max(0,player.gameData['atFlag'] - 1)
self._updateFlagState()
def _updateScoreBoard(self):
for team in self.teams:
self._scoreBoard.setTeamValue(team,team.gameData['capsules'],self.settings['Capsules to Collect'],countdown=True)
def onTransitionIn(self):
bs.TeamGameActivity.onTransitionIn(self, music='Epic' if self.settings['Epic Mode'] else 'Scary')
def _updateScoreBoard(self):
for team in self.teams:
self._scoreBoard.setTeamValue(team,team.gameData['capsules'],self._scoreToWin)
def _onCapsulePlayerCollide(self):
if not self.hasEnded():
capsuleNode, playerNode = bs.getCollisionInfo('sourceNode','opposingNode')
if capsuleNode is not None and playerNode is not None:
capsule = capsuleNode.getDelegate()
spaz = playerNode.getDelegate()
player = spaz.getPlayer() if hasattr(spaz,'getPlayer') else None
if player is not None and player.exists() and capsule is not None:
if player.isAlive():
if capsuleNode.colorTexture == self._capsuleLuckyTex:
player.gameData['capsules'] += 4
bsUtils.PopupText('BONUS!',
color=(1,1,0),
scale=1.5,
position=(capsuleNode.position)).autoRetain()
bs.playSound(self._luckyCollectSound,1.0,position=capsuleNode.position)
bs.emitBGDynamics(position=capsuleNode.position,velocity=(0,0,0),count=int(6.4+random.random()*24),scale=1.2, spread=2.0,chunkType='spark');
bs.emitBGDynamics(position=capsuleNode.position,velocity=(0,0,0),count=int(4.0+random.random()*6),emitType='tendrils');
else:
player.gameData['capsules'] += 1
bs.playSound(self._collectSound,0.6,position=capsuleNode.position)
# create a flash
light = bs.newNode('light',
attrs={'position': capsuleNode.position,
'heightAttenuated':False,
'radius':0.1,
'color':(1,1,0)})
# Create a short text informing about your inventory
self._handleCapsuleStorage(playerNode.position,player)
bs.animate(light,'intensity',{0:0,100:0.5,200:0},loop=False)
bs.gameTimer(200,light.delete)
capsule.handleMessage(bs.DieMessage())
def _handleCapsuleStorage(self,pos,player):
self.capsules = player.gameData['capsules']
if player.gameData['capsules'] > 10:
player.gameData['capsules'] = 10
self.capsules = 10
bsUtils.PopupText('Full Capacity!',
color=(1,0.85,0),
scale=1.75,
position=(pos[0],pos[1]-1,pos[2])).autoRetain()
# Make a different color and size depending on the storage
if self.capsules > 7:
self.color = (1,0,0)
self.size = 2.4
elif self.capsules > 7:
self.color = (1,0.4,0.4)
self.size = 2.1
elif self.capsules > 4:
self.color = (1,1,0.4)
self.size = 2.0
else:
self.color = (1,1,1)
self.size = 1.9
if self.capsules < 10:
bsUtils.PopupText((str(player.gameData['capsules'])),
color=self.color,
scale=self.size+(0.02*self.capsules),
position=(pos[0],pos[1]-1,pos[2])).autoRetain()
# various high-level game events come through this method
def handleMessage(self,m):
# respawn dead players
if isinstance(m,bs.PlayerSpazDeathMessage):
bs.TeamGameActivity.handleMessage(self,m) # augment standard behavior
player = m.spaz.getPlayer()
self.respawnPlayer(player) # Respawn the player
pt = m.spaz.node.position
for i in range(player.gameData['capsules'] + self.settings['Capsules on Death']): # Throw out capsules that the victim has + 2 more to keep the game running
w = 0.6 # How far from each other these capsules should spawn
s = 0.005 - (player.gameData['capsules']*0.01) # How much these capsules should fly after spawning
self._capsules.append(Capsule(position=(pt[0]+random.uniform(-w,w),
pt[1]+0.75+random.uniform(-w,w),
pt[2]),
velocity=(random.uniform(-s,s),
random.uniform(-s,s),
random.uniform(-s,s)),
lucky=False))
if random.randint(1,12) == 1 and self.settings['Allow Lucky Capsules']:
w = 0.6 # How far from each other these capsules should spawn
s = 0.005 # How much these capsules should fly after spawning
self._capsules.append(Capsule(position=(pt[0]+random.uniform(-w,w),
pt[1]+0.75+random.uniform(-w,w),
pt[2]),
velocity=(random.uniform(-s,s),
random.uniform(-s,s),
random.uniform(-s,s)),
lucky=True))
player.gameData['atFlag'] = 0
else:
# default handler:
bs.TeamGameActivity.handleMessage(self,m)
class Capsule(bs.Actor):
def __init__(self, position=(0,1,0), velocity=(0,0.5,0),lucky=False):
bs.Actor.__init__(self)
self._luckyAppearSound = bs.getSound('ding')
activity = self.getActivity()
# spawn just above the provided point
self._spawnPos = (position[0], position[1], position[2])
if lucky:
bs.playSound(self._luckyAppearSound,1.0,self._spawnPos)
self.capsule = bs.newNode("prop",
attrs={'model': activity._capsuleModel,
'colorTexture': activity._capsuleLuckyTex,
'body':'crate',
'reflection':'powerup',
'modelScale':0.8,
'bodyScale':0.65,
'density':6.0,
'reflectionScale':[0.15],
'shadowSize': 0.65,
'position':self._spawnPos,
'velocity':velocity,
'materials': [bs.getSharedObject('objectMaterial'),activity._capsuleMaterial]
},
delegate=self)
bs.animate(self.capsule,"modelScale",{0:0, 100:0.9, 160:0.8})
self.lightCapsule = bs.newNode('light',
attrs={'position':self._spawnPos,
'heightAttenuated':False,
'radius':0.5,
'color':(0.2,0.2,0)})
else:
self.capsule = bs.newNode("prop",
attrs={'model': activity._capsuleModel,
'colorTexture': activity._capsuleTex,
'body':'capsule',
'reflection':'soft',
'modelScale':0.6,
'bodyScale':0.3,
'density':4.0,
'reflectionScale':[0.15],
'shadowSize': 0.6,
'position':self._spawnPos,
'velocity':velocity,
'materials': [bs.getSharedObject('objectMaterial'),activity._capsuleMaterial]
},
delegate=self)
bs.animate(self.capsule,"modelScale",{0:0, 100:0.6, 160:0.5})
self.lightCapsule = bs.newNode('light',
attrs={'position':self._spawnPos,
'heightAttenuated':False,
'radius':0.1,
'color':(0.2,1,0.2)})
self.capsule.connectAttr('position',self.lightCapsule,'position')
def handleMessage(self,m):
if isinstance(m,bs.DieMessage):
self.capsule.delete()
try:
bs.animate(self.lightCapsule,'intensity',{0:1.0,50:0.0},loop=False)
bs.gameTimer(50,self.lightCapsule.delete)
except AttributeError: pass
elif isinstance(m,bs.OutOfBoundsMessage):
self.handleMessage(bs.DieMessage())
elif isinstance(m,bs.HitMessage):
self.capsule.handleMessage("impulse",m.pos[0],m.pos[1],m.pos[2],
m.velocity[0]/8,m.velocity[1]/8,m.velocity[2]/8,
1.0*m.magnitude,1.0*m.velocityMagnitude,m.radius,0,
m.forceDirection[0],m.forceDirection[1],m.forceDirection[2])
else:
bs.Actor.handleMessage(self,m)
================================================
FILE: mods/FillErUp.json
================================================
{
"name": "Fill 'Er Up",
"author": "joshville79",
"category": "minigames"
}
================================================
FILE: mods/FillErUp.py
================================================
import bs
import bsSpaz
import random
import bsUtils
import bsPowerup
def bsGetAPIVersion():
# see bombsquadgame.com/apichanges
return 4
def bsGetGames():
return [FillErUp]
class cargoBox(bs.Bomb):
def __init__(self,pos):
bs.Bomb.__init__(self,position=pos,bombType='tnt')
#self = box
self.node.maxSpeed = 0
self.node.damping = 100
#self.node.density = 10
pam = bs.Powerup.getFactory().powerupAcceptMaterial
nPum = self.getActivity().noPickMat
materials = getattr(self.node,'materials')
if not pam in materials:
setattr(self.node,'materials',materials + (pam,))
materials = getattr(self.node,'materials')
if not nPum in materials:
setattr(self.node,'materials',materials + (nPum,))
def handleMessage(self,m):
if isinstance(m, bs.HitMessage):
#We don't want crates taking damage.
return True
if isinstance(m, bs.PowerupMessage): #Give or take points, depending on powerup received.
for player in self.getActivity().players:
if player.gameData['crate'] == self:
if m.powerupType == 'health':
player.getTeam().gameData['score'] += 1
else:
player.getTeam().gameData['score'] += self.getActivity().settings['Curse Box Points']
self.getActivity()._updateScoreBoard()
self.setboxScoreText(str(player.getTeam().gameData['score']), player.color)
if m.sourceNode.exists():
m.sourceNode.handleMessage(bs.PowerupAcceptMessage())
else:
super(self.__class__, self).handleMessage(m)
def setboxScoreText(self,t,color=(1,1,0.4),flash=False):
"""
Utility func to show a message momentarily over our spaz that follows him around;
Handy for score updates and things.
"""
colorFin = bs.getSafeColor(color)[:3]
if not self.node.exists(): return
try: exists = self._scoreText.exists()
except Exception: exists = False
if not exists:
startScale = 0.0
m = bs.newNode('math',owner=self.node,attrs={'input1':(0,1.4,0),'operation':'add'})
self.node.connectAttr('position',m,'input2')
self._scoreText = bs.newNode('text',
owner=self.node,
attrs={'text':t,
'inWorld':True,
'shadow':1.0,
'flatness':1.0,
'color':colorFin,
'scale':0.02,
'hAlign':'center'})
m.connectAttr('output',self._scoreText,'position')
else:
self._scoreText.color = colorFin
startScale = self._scoreText.scale
self._scoreText.text = t
if flash:
combine = bs.newNode("combine",owner=self._scoreText,attrs={'size':3})
sc = 1.8
offs = 0.5
t = 300
for i in range(3):
c1 = offs+sc*colorFin[i]
c2 = colorFin[i]
bs.animate(combine,'input'+str(i),{0.5*t:c2,
0.75*t:c1,
1.0*t:c2})
combine.connectAttr('output',self._scoreText,'color')
bs.animate(self._scoreText,'scale',{0:startScale,200:0.02})
#self._scoreTextHideTimer = bs.Timer(1000,bs.WeakCall(self._hideScoreText))
def setMovingText(self, theActor, theText, color):
m = bs.newNode('math', owner=theActor.node, attrs={'input1': (0, 0.7, 0), 'operation': 'add'})
theActor.node.connectAttr('position', m, 'input2')
theActor._movingText = bs.newNode('text',
owner=theActor.node,
attrs={'text':theText,
'inWorld':True,
'shadow':1.0,
'flatness':1.0,
'color':color,
'scale':0.0,
'hAlign':'center'})
m.connectAttr('output', theActor._movingText, 'position')
bs.animate(theActor._movingText, 'scale', {0: 0.0, 1000: 0.01})
class FillErUp(bs.TeamGameActivity):
@classmethod
def getName(cls):
return 'Fill \'Er Up'
@classmethod
def getScoreInfo(cls):
return {'scoreName':'score',
'scoreType':'points',
'noneIsWinner':False,
'lowerIsBetter':False}
@classmethod
def getDescription(cls,sessionType):
return 'Fill your crate with boxes'
@classmethod
def supportsSessionType(cls,sessionType):
return True if (issubclass(sessionType,bs.FreeForAllSession)) else False
@classmethod
def getSupportedMaps(cls,sessionType):
return ['Doom Shroom','Courtyard']
@classmethod
def getSettings(cls,sessionType):
settings = [("Time Limit",{'choices':[('30 Seconds',30),('1 Minute',60),
('90 Seconds',90),('2 Minutes',120),
('3 Minutes',180),('5 Minutes',300)],'default':60}),
("Respawn Times",{'choices':[('Shorter',0.25),('Short',0.5),('Normal',1.0),('Long',2.0),('Longer',4.0)],'default':1.0}),
("Curse Box Chance (lower = more chance)",{'default':10,'minValue':5,'maxValue':15,'increment':1}),
("Curse Box Points",{'default':-2,'minValue':-10,'maxValue':-1,'increment':1}),
("Boxes Per Player",{'default':1.0,'minValue':0.5,'maxValue':3.0,'increment':0.5}),
("Epic Mode",{'default':False})]
if issubclass(sessionType,bs.TeamsSession):
settings.append(("Solo Mode",{'default':False}))
settings.append(("Balance Total Lives",{'default':False}))
return settings
def __init__(self,settings):
bs.TeamGameActivity.__init__(self,settings)
if self.settings['Epic Mode']: self._isSlowMotion = True
# show messages when players die since it's meaningful here
self.announcePlayerDeaths = True
try: self._soloMode = settings['Solo Mode']
except Exception: self._soloMode = False
self._scoreBoard = bs.ScoreBoard()
self.totBoxes = []
#Create a special powerup material for our boxes that allows pickup.
self.fpowerupMaterial = bs.Material()
# pass a powerup-touched message to applicable stuff
pam = bs.Powerup.getFactory().powerupAcceptMaterial
self.fpowerupMaterial.addActions(
conditions=(("theyHaveMaterial",pam)),
actions=(("modifyPartCollision","collide",True),
("modifyPartCollision","physical",False),
("message","ourNode","atConnect",bsPowerup._TouchedMessage())))
# we DO wanna be picked up
#self.powerupMaterial.addActions(
# conditions=("theyHaveMaterial",bs.getSharedObject('pickupMaterial')),
# actions=( ("modifyPartCollision","collide",False)))
self.fpowerupMaterial.addActions(
conditions=("theyHaveMaterial",bs.getSharedObject('footingMaterial')),
actions=(("impactSound",bs.Powerup.getFactory().dropSound,0.5,0.1)))
#Create a material to prevent TNT box pickup
self.noPickMat = bs.Material()
self.noPickMat.addActions(
conditions=("theyHaveMaterial",bs.getSharedObject('pickupMaterial')),
actions=( ("modifyPartCollision","collide",False)))
def getInstanceDescription(self):
return 'Steal all the health boxes for yourself' if isinstance(self.getSession(),bs.TeamsSession) else 'Fill your crate with boxes'
def getInstanceScoreBoardDescription(self):
return 'Steal all the health boxes for yourself' if isinstance(self.getSession(),bs.TeamsSession) else 'Fill your crate with boxes'
def onTransitionIn(self):
bs.TeamGameActivity.onTransitionIn(self, music='Epic' if self.settings['Epic Mode'] else 'Survival')
self._startGameTime = bs.getGameTime()
def onTeamJoin(self,team):
team.gameData['survivalSeconds'] = None
team.gameData['spawnOrder'] = []
team.gameData['score'] = 0
def onPlayerJoin(self, player):
#player.gameData['lives'] = 1
player.getTeam().gameData['score'] = 0
player.gameData['home'] = None
player.gameData['crate'] = None
self._updateScoreBoard()
if self._soloMode:
#player.gameData['icons'] = []
player.getTeam().gameData['spawnOrder'].append(player)
self._updateSoloMode()
else:
# create our icon and spawn
#player.gameData['icons'] = [Icon(player,position=(0,50),scale=0.8)]
self.spawnPlayer(player)
# dont waste time doing this until begin
if self.hasBegun():
pass#self._updateIcons()
def _updateSoloMode(self):
# for both teams, find the first player on the spawn order list with lives remaining
# and spawn them if they're not alive
for team in self.teams:
# prune dead players from the spawn order
team.gameData['spawnOrder'] = [p for p in team.gameData['spawnOrder'] if p.exists()]
for player in team.gameData['spawnOrder']:
if player.gameData['lives'] > 0:
if not player.isAlive(): self.spawnPlayer(player)
break
def _getSpawnPoint(self,player):
# in solo-mode, if there's an existing live player on the map, spawn at whichever
# spot is farthest from them (keeps the action spread out)
if self._soloMode:
livingPlayer = None
for team in self.teams:
for player in team.players:
if player.isAlive():
p = player.actor.node.position
livingPlayer = player
livingPlayerPos = p
break
if livingPlayer:
playerPos = bs.Vector(*livingPlayerPos)
points = []
for team in self.teams:
startPos = bs.Vector(*self.getMap().getStartPosition(team.getID()))
points.append([(startPos-playerPos).length(),startPos])
points.sort()
return points[-1][1]
else:
return None
else:
return None
def spawnPlayer(self,player):
"""
Spawn *something* for the provided bs.Player.
The default implementation simply calls spawnPlayerSpaz().
"""
#Overloaded for this game to respawn at home instead of random FFA spots
if not player.exists():
bs.printError('spawnPlayer() called for nonexistant player')
return
if player.gameData['home'] is None:
pos = self.getMap().getFFAStartPosition(self.players)
if player.gameData['crate'] is None:
box = cargoBox(pos)
box.setMovingText(box,player.getName(),player.color)
player.gameData['crate'] = box
position = [pos[0],pos[1]+1.0,pos[2]]
player.gameData['home'] = position
else:
position = player.gameData['home']
spaz = self.spawnPlayerSpaz(player, position)
#Need to prevent accepting powerups:
pam = bs.Powerup.getFactory().powerupAcceptMaterial
for attr in ['materials','rollerMaterials','extrasMaterials']:
materials = getattr(spaz.node,attr)
if pam in materials:
setattr(spaz.node,attr,tuple(m for m in materials if m != pam))
return spaz
def _printLives(self,player):
if not player.exists() or not player.isAlive(): return
try: pos = player.actor.node.position
except Exception,e:
print 'EXC getting player pos in bsElim',e
return
bs.PopupText('x'+str(player.gameData['lives']-1),color=(1,1,0,1),
offset=(0,-0.8,0),randomOffset=0.0,scale=1.8,position=pos).autoRetain()
def onPlayerLeave(self,player):
bs.TeamGameActivity.onPlayerLeave(self,player)
#player.gameData['icons'] = None
player.gameData['score'] = 0
if player.gameData['crate'].exists():
player.gameData['crate'].handleMessage(bs.DieMessage(immediate=True))
# remove us from spawn-order
if self._soloMode:
if player in player.getTeam().gameData['spawnOrder']:
player.getTeam().gameData['spawnOrder'].remove(player)
def onBegin(self):
bs.TeamGameActivity.onBegin(self)
self.setupStandardTimeLimit(self.settings['Time Limit'])
#self.setupStandardPowerupDrops()
if self._soloMode:
self._vsText = bs.NodeActor(bs.newNode("text",
attrs={'position':(0,105),
'hAttach':"center",
'hAlign':'center',
'maxWidth':200,
'shadow':0.5,
'vrDepth':390,
'scale':0.6,
'vAttach':"bottom",
'color':(0.8,0.8,0.3,1.0),
'text':bs.Lstr(resource='vsText')}))
# if balance-team-lives is on, add lives to the smaller team until total lives match
if (isinstance(self.getSession(),bs.TeamsSession)
and self.settings['Balance Total Lives']
and len(self.teams[0].players) > 0
and len(self.teams[1].players) > 0):
if self._getTotalTeamLives(self.teams[0]) < self._getTotalTeamLives(self.teams[1]):
lesserTeam = self.teams[0]
greaterTeam = self.teams[1]
else:
lesserTeam = self.teams[1]
greaterTeam = self.teams[0]
addIndex = 0
while self._getTotalTeamLives(lesserTeam) < self._getTotalTeamLives(greaterTeam):
lesserTeam.players[addIndex].gameData['lives'] += 1
addIndex = (addIndex + 1) % len(lesserTeam.players)
#self._updateIcons()
# we could check game-over conditions at explicit trigger points,
# but lets just do the simple thing and poll it...
bs.gameTimer(1000, self._update, repeat=True)
def _getTotalTeamLives(self,team):
return sum(player.gameData['lives'] for player in team.players)
def handleMessage(self,m):
if isinstance(m,bs.PlayerSpazDeathMessage):
bs.TeamGameActivity.handleMessage(self, m) # augment standard behavior
player = m.spaz.getPlayer()
self.respawnPlayer(player)
# in solo, put ourself at the back of the spawn order
if self._soloMode:
player.getTeam().gameData['spawnOrder'].remove(player)
player.getTeam().gameData['spawnOrder'].append(player)
else:
bs.TeamGameActivity.handleMessage(self, m)
def _update(self):
if self._soloMode:
# for both teams, find the first player on the spawn order list with lives remaining
# and spawn them if they're not alive
for team in self.teams:
# prune dead players from the spawn order
team.gameData['spawnOrder'] = [p for p in team.gameData['spawnOrder'] if p.exists()]
for player in team.gameData['spawnOrder']:
if player.gameData['lives'] > 0:
if not player.isAlive():
self.spawnPlayer(player)
#self._updateIcons()
break
# if we're down to 1 or fewer living teams, start a timer to end the game
# (allows the dust to settle and draws to occur if deaths are close enough)
self.boxSpawn()
def boxSpawn(self):
Plyrs = 0
for team in self.teams:
for player in team.players:
Plyrs += 1
maxBoxes = int(Plyrs * self.settings["Boxes Per Player"])
if maxBoxes > 16:
maxBoxes = 16
elif maxBoxes < 1:
maxBoxes = 1
for box in self.totBoxes:
if not box.exists():
self.totBoxes.remove(box)
while len(self.totBoxes) < maxBoxes:
#print([Plyrs, self.boxMult,len(self.totBoxes), maxBoxes])
if random.randint(1,self.settings["Curse Box Chance (lower = more chance)"]) == 1:
type = 'curse'
else:
type = 'health'
box = bsPowerup.Powerup(position=self.getRandomPowerupPoint(), powerupType=type,expire=False).autoRetain()
#we have to remove the default powerup material because it doesn't allow for pickups.
#Then we add our own powerup material.
pm = box.getFactory().powerupMaterial
materials = getattr(box.node,'materials')
if pm in materials:
setattr(box.node,'materials',tuple(m for m in materials if m != pm))
materials = getattr(box.node,'materials')
if not self.fpowerupMaterial in materials:
setattr(box.node,'materials',materials + (self.fpowerupMaterial,))
self.totBoxes.append(box)
#self.boxMult -= self.settings["Box Reduction Rate"]
def getRandomPowerupPoint(self):
myMap = self.getMap().getName()
#print(myMap)
if myMap == 'Doom Shroom':
while True:
x = random.uniform(-1.0,1.0)
y = random.uniform(-1.0,1.0)
if x*x+y*y < 1.0: break
return ((5.0*x,4.0,-3.5+3.0*y))
elif myMap == 'Courtyard':
x = random.uniform(-3.3,3.3)
y = random.uniform(-3.9,-0.2)
return ((x, 4.0, y))
else:
x = random.uniform(-5.0,5.0)
y = random.uniform(-6.0,0.0)
return ((x, 8.0, y))
def _getLivingTeams(self):
return [team for team in self.teams if len(team.players) > 0 and any(player.gameData['lives'] > 0 for player in team.players)]
def _updateScoreBoard(self):
for team in self.teams:
self._scoreBoard.setTeamValue(team, team.gameData['score'])
def endGame(self):
if self.hasEnded(): return
results = bs.TeamGameResults()
self._vsText = None # kill our 'vs' if its there
for team in self.teams:
results.setTeamScore(team, team.gameData['score'])
self.end(results=results)
================================================
FILE: mods/FlagDay.py
================================================
#FlagDay
import bs
import random
import bsUtils
import math
# http://www.froemling.net/docs/bombsquad-python-api
#if you really want in-depth explanations of specific terms, go here ^
# fixing random generation of players in setupNextRound
class FlagBearer(bs.PlayerSpaz):
def handleMessage(self, m):
bs.PlayerSpaz.handleMessage(self, m)
if isinstance(m, bs.PowerupMessage):
if self.getActivity().lastPrize == 'curse':
self.getPlayer().getTeam().gameData['score'] += 25
self.getActivity().updateScore()
elif self.getActivity().lastPrize == 'landmines':
self.getPlayer().getTeam().gameData['score'] += 15
self.getActivity().updateScore()
self.connectControlsToPlayer()
elif self.getActivity().lastPrize == 'climb':
self.getPlayer().getTeam().gameData['score'] += 50
self.getActivity().updateScore()
#This gives the API version to the game to make sure that we are using the right vocabulary
def bsGetAPIVersion():
return 4
#This tells the game what kind of program this is
def bsGetGames():
return [FlagDay]
#this gives the game a unique code for our game in this case: "NewGame 124" (One of my other games was NewGame123) P.S. Don't change this half-way through making it
def bsGetLevels():
return [bs.Level('FlagDay45986',
displayName='${GAME}',
gameType=FlagDay,
settings={},
previewTexName='courtyardPreview')]
#this is the class that will actually be saved to the game as a mini-game
class FlagDay(bs.TeamGameActivity):
def __init__(self,settings):
bs.TeamGameActivity.__init__(self,settings)
self.info = bs.NodeActor(bs.newNode('text',
attrs={'vAttach': 'bottom',
'hAlign': 'center',
'vrDepth': 0,
'color': (0,.2,0),
'shadow': 1.0,
'flatness': 1.0,
'position': (0,0),
'scale': 0.8,
'text': "Created by MattZ45986 on Github",
}))
#gives it a name
@classmethod
def getName(cls):
return 'Flag Day'
#Gives it how things are scored
@classmethod
def getScoreInfo(cls):
return {'scoreType':'points'}
#Gives a description of the game
@classmethod
def getDescription(cls,sessionType):
return 'Pick up flags to receive a prize.\nBut beware...'
#Gives which maps are supported, in this case only courtyard though you could probably try it with others, too
@classmethod
def getSupportedMaps(cls,sessionType):
return ['Courtyard']
#Tells the game what kinds of seesions are supported by this mini-game
@classmethod
def supportsSessionType(cls,sessionType):
return True if issubclass(sessionType,bs.FreeForAllSession) or issubclass(sessionType,bs.TeamsSession) or issubclass(sessionType,bs.CoopSession) else False
#Tells the game what to do on the transition in
def onTransitionIn(self):
#Sets the music to "To the Death"
bs.TeamGameActivity.onTransitionIn(self,music='ToTheDeath')
def onPlayerJoin(self, player):
player.getTeam().gameData['score'] = 0
if self.hasBegun():
bs.screenMessage(bs.Lstr(resource='playerDelayedJoinText', subs=[('${PLAYER}', player.getName(full=True))]),
color=(0, 1, 0))
def onPlayerLeave(self, player):
if player is self.currentPlayer:
self.setupNextRound()
self.checkEnd()
bs.TeamGameActivity.onPlayerLeave(self,player)
self.queueLine.remove(player)
def onBegin(self):
self.bombSurvivor = None
self.light = None
self.set = False
#Do normal stuff: calls to the main class to operate everything that usually would be done
bs.TeamGameActivity.onBegin(self)
self.b = []
self.queueLine = []
self.playerIndex = 0
for player in self.players:
player.gameData['dead'] = False
if player.actor is not None:
player.actor.handleMessage(bs.DieMessage())
player.actor.node.delete()
self.queueLine.append(player)
self.spawnPlayerSpaz(self.queueLine[self.playerIndex%len(self.queueLine)],(0,3,-2))
self.lastPrize = 'none'
self.currentPlayer = self.queueLine[0]
#Declare a set of bots (enemies) that we will use later
self._bots = bs.BotSet()
#make another scoreboard? IDK why I did this, probably to make it easier to refer to in the future
self._scoredis = bs.ScoreBoard()
#for each team in the game's directory, give them a score of zero
for team in self.teams:
team.gameData['score'] = 0
#Now we go ahead and put that on the scoreboard
for player in self.queueLine:
self._scoredis.setTeamValue(player.getTeam(),player.getTeam().gameData['score'])
self.resetFlags()
#This handles all the messages that the game throws at us
def handleMessage(self,m):
#If it's a flag picked up...
if isinstance(m,bs.FlagPickedUpMessage):
#Get the last player to hold that flag
m.flag._lastPlayerToHold = m.node.getDelegate().getPlayer()
#Get the last actor to hold that flag (If you are a player, then your body is the actor, think of it like that)
self._player = m.node.getDelegate()
#The person to last hold a flag gets the prize, not the person to hold that flag, note.
self._prizeRecipient = m.node.getDelegate().getPlayer()
#Call a method to kill the flags
self.killFlags()
self.givePrize(random.randint(1,8))
self.currentPlayer = self._prizeRecipient
#If a player died...
if isinstance(m,bs.PlayerSpazDeathMessage):
#give them a nice farewell
if bs.getGameTime() < 500: return
if m.how == 'game': return
guy = m.spaz.getPlayer()
bs.screenMessage(str(guy.getName()) + " died!",color=guy.color)
guy.gameData['dead'] = True
if guy is self.currentPlayer:
self.setupNextRound()
#check to see if we can end the game
self.checkEnd()
#If a bot died...
if isinstance(m,bs.SpazBotDeathMessage):
#find out which team the last person to hold a flag was on
team = self._prizeRecipient.getTeam()
#give them their points
team.gameData['score'] += self._badGuyCost
#update the scores
for team in self.teams:
self._scoredis.setTeamValue(team,team.gameData['score'])
bs.gameTimer(300,self.checkBots)
def spawnPlayerSpaz(self,player,position=(0,0,0),angle=None):
name = player.getName()
color = player.color
highlight = player.highlight
lightColor = bsUtils.getNormalizedColor(color)
displayColor = bs.getSafeColor(color,targetIntensity=0.75)
spaz = FlagBearer(color=color,
highlight=highlight,
character=player.character,
player=player)
player.setActor(spaz)
if isinstance(self.getSession(),bs.CoopSession) and self.getMap().getName() in ['Courtyard','Tower D']:
mat = self.getMap().preloadData['collideWithWallMaterial']
spaz.node.materials += (mat,)
spaz.node.rollerMaterials += (mat,)
spaz.node.name = name
spaz.node.nameColor = displayColor
spaz.connectControlsToPlayer()
spaz.handleMessage(bs.StandMessage(position,angle if angle is not None else random.uniform(0,360)))
t = bs.getGameTime()
bs.playSound(self._spawnSound,1,position=spaz.node.position)
light = bs.newNode('light',attrs={'color':lightColor})
spaz.node.connectAttr('position',light,'position')
bsUtils.animate(light,'intensity',{0:0,250:1,500:0})
bs.gameTimer(500,light.delete)
return spaz
#a method to remake the flags
def resetFlags(self):
#remake the flags
self._flag1 = bs.Flag(position=(0,3,1),touchable=True,color=(0,0,1))
self._flag2 = bs.Flag(position=(0,3,-5),touchable=True,color=(1,0,0))
self._flag3 = bs.Flag(position=(3,3,-2),touchable=True,color=(0,1,0))
self._flag4 = bs.Flag(position=(-3,3,-2),touchable=True,color=(1,1,1))
self._flag5 = bs.Flag(position=(1.8,3,.2),touchable=True,color=(0,1,1))
self._flag6 = bs.Flag(position=(-1.8,3,.2),touchable=True,color=(1,0,1))
self._flag7 = bs.Flag(position=(1.8,3,-3.8),touchable=True,color=(1,1,0))
self._flag8 = bs.Flag(position=(-1.8,3,-3.8),touchable=True,color=(0,0,0))
#a method to kill the flags
def killFlags(self):
#destroy all the flags by erasing all references to them, indicated by None similar to null
self._flag1 = None
self._flag2 = None
self._flag3 = None
self._flag4 = None
self._flag5 = None # 132, 210 ,12
self._flag6 = None
self._flag7 = None
self._flag8 = None
def setupNextRound(self):
if self.light is not None: self.light.delete()
for bomb in self.b:
bomb.handleMessage(bs.DieMessage())
self.killFlags()
self._bots.clear()
self.resetFlags()
self.currentPlayer.actor.handleMessage(bs.DieMessage(how='game'))
self.currentPlayer.actor.node.delete()
c = 0
self.playerIndex += 1
self.playerIndex %= len(self.queueLine)
if len(self.queueLine) > 0:
while self.queueLine[self.playerIndex].gameData['dead']:
if c > len(self.queueLine): return
self.playerIndex += 1
self.playerIndex %= len(self.queueLine)
c += 1
self.spawnPlayerSpaz(self.queueLine[self.playerIndex],(0,3,-2))
self.currentPlayer = self.queueLine[self.playerIndex]
self.lastPrize = 'none'
#a method to give the prize recipient a prize depending on what flag he took (not really).
def givePrize(self, prize):
if prize == 1:
#Curse him aka make him blow up in 5 seconds
#give them a nice message
bs.screenMessage("You were", color=(1,0,0))
bs.screenMessage("CURSED", color=(.1,.1,.1))
self.makeHealthBox((0,0,0))
self.lastPrize = 'curse'
self._prizeRecipient.actor.curse()
bs.gameTimer(5500,self.setupNextRound)
if prize == 2:
self.setupROF()
bs.screenMessage("RUN", color=(1,.2,.1))
self.lastPrize = 'ringoffire'
if prize == 3:
self.lastPrize = 'climb'
self.light =bs.newNode('locator',attrs={'shape':'circle','position':(0,3,-9),
'color':(1,1,1),'opacity':1,
'drawBeauty':True,'additive':True})
bs.screenMessage("Climb to the top",color=(.5,.5,.5))
bs.gameTimer(3000, bs.Call(self.makeHealthBox,(0,6,-9)))
bs.gameTimer(10000, self.setupNextRound)
if prize == 4:
self.lastPrize = 'landmines'
self.makeHealthBox((6,5,-2))
self.makeLandMines()
self._prizeRecipient.actor.node.getDelegate().connectControlsToPlayer(enableBomb=False)
self._prizeRecipient.actor.node.handleMessage(bs.StandMessage(position=(-6,3,-2)))
bs.gameTimer(7000,self.setupNextRound)
if prize == 5:
#Make it rain bombs
self.bombSurvivor = self._prizeRecipient
bs.screenMessage("BOMB RAIN!", color=(1,.5,.16))
#Set positions for the bombs to drop
for bzz in range(-5,6):
for azz in range(-5,2):
#for each position make a bomb drop there
self.makeBomb(bzz,azz)
bs.gameTimer(3300,self.givePoints)
self.lastPrize = 'bombrain'
if prize == 6:
self.setupBR()
self.bombSurvivor = self._prizeRecipient
bs.gameTimer(7000,self.givePoints)
self.lastPrize = 'bombroad'
if prize == 7:
#makes killing a bad guy worth ten points
self._badGuyCost = 2
bs.screenMessage("Lame Guys", color=(1,.5,.16))
#makes a set of nine positions
for a in range(-1,2):
for b in range(-3,0):
#and spawns one in each position
self._bots.spawnBot(bs.ToughGuyBotLame,pos=(a,2.5,b))
#and we give our player boxing gloves and a shield
self._player.equipBoxingGloves()
self._player.equipShields()
self.lastPrize = 'lameguys'
if prize == 8:
bs.screenMessage("!JACKPOT!", color=(1,0,0))
bs.screenMessage("!JACKPOT!", color=(0,1,0))
bs.screenMessage("!JACKPOT!", color=(0,0,1))
team = self._prizeRecipient.getTeam()
#GIVE THEM A WHOPPING 50 POINTS!!!
team.gameData['score'] += 50
# and update the scores
self.updateScore()
self.lastPrize = 'jackpot'
bs.gameTimer(2000,self.setupNextRound)
def updateScore(self):
for player in self.queueLine:
self._scoredis.setTeamValue(player.getTeam(),player.getTeam().gameData['score'])
def checkBots(self):
if not self._bots.haveLivingBots():
self.setupNextRound()
def makeLandMines(self):
self.b = []
for i in range(-11,7):
self.b.append(bs.Bomb(position=(0, 6, i/2.0), bombType='landMine', blastRadius=2.0))
self.b[i+10].arm()
def givePoints(self):
if self.bombSurvivor is not None and self.bombSurvivor.isAlive():
self.bombSurvivor.getTeam().gameData['score'] += 20
self.updateScore()
def makeHealthBox(self, position=(0,3,0)):
if position == (0,3,0):
position = (random.randint(-6,6),6,random.randint(-6,4))
elif position == (0,0,0):
position = random.choice(((-7,6,-5),(7,6,-5),(-7,6,1),(7,6,1)))
self.healthBox = bs.Powerup(position=position,powerupType='health').autoRetain()
#called in prize #5
def makeBomb(self,xpos,zpos):
#makes a bomb at the given position then auto-retains it aka: makes sure it doesn't disappear because there is no reference to it
b=bs.Bomb(position=(xpos, 12, zpos)).autoRetain()
def setupBR(self):
self.makeBombRow(6)
self._prizeRecipient.actor.handleMessage(bs.StandMessage(position=(6,3,-2)))
def makeBombRow(self, num):
if num == 0:
bs.gameTimer(1000, self.setupNextRound)
return
for i in range(-11,7):
self.b.append(bs.Bomb(position=(-3, 3, i/2.0), velocity=(12,0,0),bombType='normal', blastRadius=1.2))
if self._prizeRecipient.isAlive(): bs.gameTimer(1000,bs.Call(self.makeBombRow,num-1))
else: self.setupNextRound()
def setupROF(self):
self.makeBlastRing(10)
self._prizeRecipient.actor.handleMessage(bs.StandMessage(position=(0,3,-2)))
def makeBlastRing(self,length):
if length == 0:
self.setupNextRound()
self._prizeRecipient.getTeam().gameData['score'] += 50
self.updateScore()
return
for angle in range(0,360,45):
angle += random.randint(0,45)
angle %= 360
x = length * math.cos(math.radians(angle))
z = length * math.sin(math.radians(angle))
blast = bs.Blast(position=(x,2.2,z-2),blastRadius=3.5)
if self._prizeRecipient.isAlive(): bs.gameTimer(750,bs.Call(self.makeBlastRing,length-1))
else: self.setupNextRound()
#checks to see if we should end the game
def checkEnd(self):
for player in self.queueLine:
if not player.gameData['dead']: return
self.endGame()
#called when ready to end the game
def endGame(self):
if self.set == True: return
self.set = True
results = bs.TeamGameResults()
#Set the results for the game to display at the end of the game
for team in self.teams:
results.setTeamScore(team, team.gameData['score'])
self.end(results=results)
================================================
FILE: mods/GravityFalls.py
================================================
import bs
import bsUtils
import random
def bsGetAPIVersion():
return 4
def bsGetGames():
return [GravityFalls]
class FlyMessage(object):
pass
class Icon(bs.Actor):
def __init__(self,player,position,scale,showLives=True,showDeath=True,
nameScale=1.0,nameMaxWidth=115.0,flatness=1.0,shadow=1.0):
bs.Actor.__init__(self)
self._player = player
self._showLives = showLives
self._showDeath = showDeath
self._nameScale = nameScale
self._outlineTex = bs.getTexture('characterIconMask')
icon = player.getIcon()
self.node = bs.newNode('image',
owner=self,
attrs={'texture':icon['texture'],
'tintTexture':icon['tintTexture'],
'tintColor':icon['tintColor'],
'vrDepth':400,
'tint2Color':icon['tint2Color'],
'maskTexture':self._outlineTex,
'opacity':1.0,
'absoluteScale':True,
'attach':'bottomCenter'})
self._nameText = bs.newNode('text',
owner=self.node,
attrs={'text':bs.Lstr(value=player.getName()),
'color':bs.getSafeColor(player.getTeam().color),
'hAlign':'center',
'vAlign':'center',
'vrDepth':410,
'maxWidth':nameMaxWidth,
'shadow':shadow,
'flatness':flatness,
'hAttach':'center',
'vAttach':'bottom'})
if self._showLives:
self._livesText = bs.newNode('text',
owner=self.node,
attrs={'text':'x0',
'color':(1,1,0.5),
'hAlign':'left',
'vrDepth':430,
'shadow':1.0,
'flatness':1.0,
'hAttach':'center',
'vAttach':'bottom'})
self.setPositionAndScale(position,scale)
def setPositionAndScale(self,position,scale):
self.node.position = position
self.node.scale = [70.0*scale]
self._nameText.position = (position[0],position[1]+scale*52.0)
self._nameText.scale = 1.0*scale*self._nameScale
if self._showLives:
self._livesText.position = (position[0]+scale*10.0,position[1]-scale*43.0)
self._livesText.scale = 1.0*scale
def updateForLives(self):
if self._player.exists():
lives = self._player.gameData['lives']
else: lives = 0
if self._showLives:
if lives > 0: self._livesText.text = 'x'+str(lives-1)
else: self._livesText.text = ''
if lives == 0:
self._nameText.opacity = 0.2
self.node.color = (0.7,0.3,0.3)
self.node.opacity = 0.2
def handlePlayerSpawned(self):
if not self.node.exists(): return
self.node.opacity = 1.0
self.updateForLives()
def handlePlayerDied(self):
if not self.node.exists(): return
if self._showDeath:
bs.animate(self.node,'opacity',{0:1.0,50:0.0,100:1.0,150:0.0,200:1.0,250:0.0,
300:1.0,350:0.0,400:1.0,450:0.0,500:1.0,550:0.2})
lives = self._player.gameData['lives']
if lives == 0: bs.gameTimer(600,self.updateForLives)
class AntiGravityPlayerSpaz(bs.PlayerSpaz):
def handleMessage(self,m):
if isinstance(m, FlyMessage):
try:
self.node.handleMessage("impulse",self.node.position[0],self.node.position[1]+.5,self.node.position[2],0,5,0,
3,10,0,0,
0,5,0)
except Exception: pass
else: bs.PlayerSpaz.handleMessage(self,m)
class GravityFalls(bs.TeamGameActivity):
@classmethod
def getName(cls):
return 'Gravity Falls'
@classmethod
def getScoreInfo(cls):
return {'scoreName':'Survived',
'scoreType':'seconds',
'noneIsWinner':True}
@classmethod
def getDescription(cls,sessionType):
return 'Last remaining alive wins.'
@classmethod
def supportsSessionType(cls,sessionType):
return True if (issubclass(sessionType,bs.TeamsSession)
or issubclass(sessionType,bs.FreeForAllSession)) else False
@classmethod
def getSupportedMaps(cls,sessionType):
return bs.getMapsSupportingPlayType("melee")
@classmethod
def getSettings(cls,sessionType):
settings = [("Lives Per Player",{'default':1,'minValue':1,'maxValue':10,'increment':1}),
("Time Limit",{'choices':[('None',0),('1 Minute',60),
('2 Minutes',120),('5 Minutes',300),
('10 Minutes',600),('20 Minutes',1200)],'default':0}),
("Respawn Times",{'choices':[('Shorter',0.25),('Short',0.5),('Normal',1.0),('Long',2.0),('Longer',4.0)],'default':1.0}),
("Epic Mode",{'default':False})]
if issubclass(sessionType,bs.TeamsSession):
settings.append(("Solo Mode",{'default':False}))
settings.append(("Balance Total Lives",{'default':False}))
return settings
def __init__(self,settings):
bs.TeamGameActivity.__init__(self,settings)
if self.settings['Epic Mode']: self._isSlowMotion = True
self.info = bs.NodeActor(bs.newNode('text',
attrs={'vAttach': 'bottom',
'hAlign': 'center',
'vrDepth': 0,
'color': (0,.2,0),
'shadow': 1.0,
'flatness': 1.0,
'position': (0,0),
'scale': 0.8,
'text': "Created by MattZ45986 on Github",
}))
self.announcePlayerDeaths = True
try: self._soloMode = settings['Solo Mode']
except Exception: self._soloMode = False
self._scoreBoard = bs.ScoreBoard()
def getInstanceDescription(self):
return 'Last team standing wins.' if isinstance(self.getSession(),bs.TeamsSession) else 'Last one standing wins.'
def getInstanceScoreBoardDescription(self):
return 'last team standing wins' if isinstance(self.getSession(),bs.TeamsSession) else 'last one standing wins'
def onTransitionIn(self):
bs.TeamGameActivity.onTransitionIn(self, music='Epic' if self.settings['Epic Mode'] else 'Survival')
self._startGameTime = bs.getGameTime()
def onTeamJoin(self,team):
team.gameData['survivalSeconds'] = None
team.gameData['spawnOrder'] = []
def _updateSoloMode(self):
# for both teams, find the first player on the spawn order list with lives remaining
# and spawn them if they're not alive
for team in self.teams:
# prune dead players from the spawn order
team.gameData['spawnOrder'] = [p for p in team.gameData['spawnOrder'] if p.exists()]
for player in team.gameData['spawnOrder']:
if player.gameData['lives'] > 0:
if not player.isAlive(): self.spawnPlayer(player)
break
def _updateIcons(self):
# in free-for-all mode, everyone is just lined up along the bottom
if isinstance(self.getSession(),bs.FreeForAllSession):
count = len(self.teams)
xOffs = 85
x = xOffs*(count-1) * -0.5
for i,team in enumerate(self.teams):
if len(team.players) == 1:
player = team.players[0]
for icon in player.gameData['icons']:
icon.setPositionAndScale((x,30),0.7)
icon.updateForLives()
x += xOffs
# in teams mode we split up teams
else:
if self._soloMode:
# first off, clear out all icons
for player in self.players:
player.gameData['icons'] = []
# now for each team, cycle through our available players adding icons
for team in self.teams:
if team.getID() == 0:
x = -60
xOffs = -78
else:
x = 60
xOffs = 78
isFirst = True
testLives = 1
while True:
playersWithLives = [p for p in team.gameData['spawnOrder'] if p.exists() and p.gameData['lives'] >= testLives]
if len(playersWithLives) == 0: break
for player in playersWithLives:
player.gameData['icons'].append(Icon(player,
position=(x,(40 if isFirst else 25)),
scale=1.0 if isFirst else 0.5,
nameMaxWidth=130 if isFirst else 75,
nameScale=0.8 if isFirst else 1.0,
flatness=0.0 if isFirst else 1.0,
shadow=0.5 if isFirst else 1.0,
showDeath=True if isFirst else False,
showLives=False))
x += xOffs * (0.8 if isFirst else 0.56)
isFirst = False
testLives += 1
# non-solo mode
else:
for team in self.teams:
if team.getID() == 0:
x = -50
xOffs = -85
else:
x = 50
xOffs = 85
for player in team.players:
for icon in player.gameData['icons']:
icon.setPositionAndScale((x,30),0.7)
icon.updateForLives()
x += xOffs
def _getSpawnPoint(self,player):
# in solo-mode, if there's an existing live player on the map, spawn at whichever
# spot is farthest from them (keeps the action spread out)
if self._soloMode:
livingPlayer = None
for team in self.teams:
for player in team.players:
if player.isAlive():
p = player.actor.node.position
livingPlayer = player
livingPlayerPos = p
break
if livingPlayer:
playerPos = bs.Vector(*livingPlayerPos)
points = []
for team in self.teams:
startPos = bs.Vector(*self.getMap().getStartPosition(team.getID()))
points.append([(startPos-playerPos).length(),startPos])
points.sort()
return points[-1][1]
else:
return None
else:
return None
def spawnPlayer(self,player):
self.spawnPlayerSpaz(player,(0,5,0))
if not self._soloMode:
bs.gameTimer(300,bs.Call(self._printLives,player))
# if we have any icons, update their state
for icon in player.gameData['icons']:
icon.handlePlayerSpawned()
def spawnPlayerSpaz(self,player,position=(0,0,0),angle=None):
name = player.getName()
color = player.color
highlight = player.highlight
lightColor = bsUtils.getNormalizedColor(color)
displayColor = bs.getSafeColor(color,targetIntensity=0.75)
spaz = AntiGravityPlayerSpaz(color=color,
highlight=highlight,
character=player.character,
player=player)
player.setActor(spaz)
if isinstance(self.getSession(),bs.CoopSession) and self.getMap().getName() in ['Courtyard','Tower D']:
mat = self.getMap().preloadData['collideWithWallMaterial']
spaz.node.materials += (mat,)
spaz.node.rollerMaterials += (mat,)
spaz.node.name = name
spaz.node.nameColor = displayColor
spaz.connectControlsToPlayer()
spaz.handleMessage(bs.StandMessage(position,angle if angle is not None else random.uniform(0,360)))
t = bs.getGameTime()
bs.playSound(self._spawnSound,1,position=spaz.node.position)
light = bs.newNode('light',attrs={'color':lightColor})
spaz.node.connectAttr('position',light,'position')
bsUtils.animate(light,'intensity',{0:0,250:1,500:0})
bs.gameTimer(500,light.delete)
bs.gameTimer(1000,bs.Call(self.raisePlayer, player))
return spaz
def _printLives(self,player):
if not player.exists() or not player.isAlive(): return
try: pos = player.actor.node.position
except Exception,e:
print 'EXC getting player pos in bsElim',e
return
bs.PopupText('x'+str(player.gameData['lives']-1),color=(1,1,0,1),
offset=(0,-0.8,0),randomOffset=0.0,scale=1.8,position=pos).autoRetain()
def onPlayerJoin(self, player):
# no longer allowing mid-game joiners here... too easy to exploit
if self.hasBegun():
player.gameData['lives'] = 0
player.gameData['icons'] = []
# make sure our team has survival seconds set if they're all dead
# (otherwise blocked new ffa players would be considered 'still alive' in score tallying)
if self._getTotalTeamLives(player.getTeam()) == 0 and player.getTeam().gameData['survivalSeconds'] is None:
player.getTeam().gameData['survivalSeconds'] = 0
bs.screenMessage(bs.Lstr(resource='playerDelayedJoinText',subs=[('${PLAYER}',player.getName(full=True))]),color=(0,1,0))
return
player.gameData['lives'] = self.settings['Lives Per Player']
if self._soloMode:
player.gameData['icons'] = []
player.getTeam().gameData['spawnOrder'].append(player)
self._updateSoloMode()
else:
# create our icon and spawn
player.gameData['icons'] = [Icon(player,position=(0,50),scale=0.8)]
if player.gameData['lives'] > 0:
self.spawnPlayer(player)
# dont waste time doing this until begin
if self.hasBegun():
self._updateIcons()
def onPlayerLeave(self,player):
bs.TeamGameActivity.onPlayerLeave(self,player)
player.gameData['icons'] = None
# remove us from spawn-order
if self._soloMode:
if player in player.getTeam().gameData['spawnOrder']:
player.getTeam().gameData['spawnOrder'].remove(player)
# update icons in a moment since our team will be gone from the list then
bs.gameTimer(0, self._updateIcons)
def raisePlayer(self, player):
player.actor.handleMessage(FlyMessage())
if player.isAlive():
bs.gameTimer(50,bs.Call(self.raisePlayer,player))
"""spaz.node.handleMessage("impulse",spaz.node.position[0],spaz.node.position[1],spaz.node.position[2],
0,8,0,
2,6,0,0,0,8,0)"""
def onBegin(self):
bs.TeamGameActivity.onBegin(self)
self.setupStandardTimeLimit(self.settings['Time Limit'])
self.setupStandardPowerupDrops()
if self._soloMode:
self._vsText = bs.NodeActor(bs.newNode("text",
attrs={'position':(0,105),
'hAttach':"center",
'hAlign':'center',
'maxWidth':200,
'shadow':0.5,
'vrDepth':390,
'scale':0.6,
'vAttach':"bottom",
'color':(0.8,0.8,0.3,1.0),
'text':bs.Lstr(resource='vsText')}))
# if balance-team-lives is on, add lives to the smaller team until total lives match
if (isinstance(self.getSession(),bs.TeamsSession)
and self.settings['Balance Total Lives']
and len(self.teams[0].players) > 0
and len(self.teams[1].players) > 0):
if self._getTotalTeamLives(self.teams[0]) < self._getTotalTeamLives(self.teams[1]):
lesserTeam = self.teams[0]
greaterTeam = self.teams[1]
else:
lesserTeam = self.teams[1]
greaterTeam = self.teams[0]
addIndex = 0
while self._getTotalTeamLives(lesserTeam) < self._getTotalTeamLives(greaterTeam):
lesserTeam.players[addIndex].gameData['lives'] += 1
addIndex = (addIndex + 1) % len(lesserTeam.players)
self._updateIcons()
# we could check game-over conditions at explicit trigger points,
# but lets just do the simple thing and poll it...
bs.gameTimer(1000, self._update, repeat=True)
def _getTotalTeamLives(self,team):
return sum(player.gameData['lives'] for player in team.players)
def handleMessage(self,m):
if isinstance(m,bs.PlayerSpazDeathMessage):
bs.TeamGameActivity.handleMessage(self, m) # augment standard behavior
player = m.spaz.getPlayer()
player.gameData['lives'] -= 1
if player.gameData['lives'] < 0:
bs.printError('Got lives < 0 in Elim; this shouldnt happen. solo:'+str(self._soloMode))
player.gameData['lives'] = 0
# if we have any icons, update their state
for icon in player.gameData['icons']:
icon.handlePlayerDied()
# play big death sound on our last death or for every one in solo mode
if self._soloMode or player.gameData['lives'] == 0:
bs.playSound(bs.Spaz.getFactory().singlePlayerDeathSound)
# if we hit zero lives, we're dead (and our team might be too)
if player.gameData['lives'] == 0:
# if the whole team is now dead, mark their survival time..
#if all(teammate.gameData['lives'] == 0 for teammate in player.getTeam().players):
if self._getTotalTeamLives(player.getTeam()) == 0:
player.getTeam().gameData['survivalSeconds'] = (bs.getGameTime()-self._startGameTime)/1000
else:
# otherwise, in regular mode, respawn..
if not self._soloMode:
self.respawnPlayer(player)
# in solo, put ourself at the back of the spawn order
if self._soloMode:
player.getTeam().gameData['spawnOrder'].remove(player)
player.getTeam().gameData['spawnOrder'].append(player)
def _update(self):
if self._soloMode:
# for both teams, find the first player on the spawn order list with lives remaining
# and spawn them if they're not alive
for team in self.teams:
# prune dead players from the spawn order
team.gameData['spawnOrder'] = [p for p in team.gameData['spawnOrder'] if p.exists()]
for player in team.gameData['spawnOrder']:
if player.gameData['lives'] > 0:
if not player.isAlive():
self.spawnPlayer(player)
self._updateIcons()
break
# if we're down to 1 or fewer living teams, start a timer to end the game
# (allows the dust to settle and draws to occur if deaths are close enough)
if len(self._getLivingTeams()) < 2:
self._roundEndTimer = bs.Timer(500,self.endGame)
def _getLivingTeams(self):
return [team for team in self.teams if len(team.players) > 0 and any(player.gameData['lives'] > 0 for player in team.players)]
def endGame(self):
if self.hasEnded(): return
results = bs.TeamGameResults()
self._vsText = None # kill our 'vs' if its there
for team in self.teams:
results.setTeamScore(team, team.gameData['survivalSeconds'])
self.end(results=results)
================================================
FILE: mods/Greed.json
================================================
{
"name": "Greed",
"author": "joshville79",
"category": "minigames"
}
================================================
FILE: mods/Greed.py
================================================
import bs
import random
import bsUtils
import bsPowerup
from bsSpaz import PlayerSpazHurtMessage
def bsGetAPIVersion():
# see bombsquadgame.com/apichanges
return 4
def bsGetGames():
return [Greed]
class PlayerSpaz_Greed(bs.PlayerSpaz):
def handleMessage(self, m):
#print(m)
#First we copy handling from PlayerSpaz, then almost the whole HitMessage handling from bsSpaz, but just to calculate the "damage".
if isinstance(m,bs.HitMessage):
#Damage is calculated in the bsSpaz message handling, which happens
#after the PlayerSpaz message handling. Here we have to pull the code
#from PlayerSpaz in order to give kill credit (and avoid suicide), then the code from Spaz.
if m.sourcePlayer is not None and m.sourcePlayer.exists():
self.lastPlayerAttackedBy = m.sourcePlayer
self.lastAttackedTime = bs.getGameTime()
self.lastAttackedType = (m.hitType,m.hitSubType)
#self.__superHandleMessage(m) # augment standard behavior #super is not needed anymore due to being copied here below
activity = self._activity()
if activity is not None:
activity.handleMessage(PlayerSpazHurtMessage(self))
#End of code from bsPlayerSpaz
#Now the code from bsSpaz
boxDamage = 0
if not self.node.exists(): return
if self.node.invincible == True:
bs.playSound(self.getFactory().blockSound,1.0,position=self.node.position)
return True
# if we were recently hit, don't count this as another
# (so punch flurries and bomb pileups essentially count as 1 hit)
gameTime = bs.getGameTime()
if self._lastHitTime is None or gameTime-self._lastHitTime > 1000:
self._numTimesHit += 1
self._lastHitTime = gameTime
mag = m.magnitude * self._impactScale
velocityMag = m.velocityMagnitude * self._impactScale
damageScale = 0.22
# if they've got a shield, deliver it to that instead..
if self.shield is not None:
if m.flatDamage: damage = m.flatDamage * self._impactScale
else:
# hit our spaz with an impulse but tell it to only return theoretical damage; not apply the impulse..
self.node.handleMessage("impulse",m.pos[0],m.pos[1],m.pos[2],
m.velocity[0],m.velocity[1],m.velocity[2],
mag,velocityMag,m.radius,1,m.forceDirection[0],m.forceDirection[1],m.forceDirection[2])
damage = damageScale * self.node.damage
self.shieldHitPoints -= damage
self.shield.hurt = 1.
gitextract_8htf1a4p/
├── .gitignore
├── LICENSE
├── README.md
├── index.json
├── mods/
│ ├── AroundTheWorld.py
│ ├── BackToYou.json
│ ├── BackToYou.py
│ ├── Basketball.json
│ ├── Basketball.py
│ ├── BuddyBunny.json
│ ├── BuddyBunny.py
│ ├── Collector.json
│ ├── Collector.py
│ ├── FillErUp.json
│ ├── FillErUp.py
│ ├── FlagDay.py
│ ├── GravityFalls.py
│ ├── Greed.json
│ ├── Greed.py
│ ├── GuessTheBomb.json
│ ├── GuessTheBomb.py
│ ├── HazardousCargo.json
│ ├── HazardousCargo.py
│ ├── Infection.json
│ ├── Infection.py
│ ├── JumpingContest.py
│ ├── LandGrab.json
│ ├── LandGrab.py
│ ├── Paint.py
│ ├── Portal.json
│ ├── Portal.py
│ ├── Protection.json
│ ├── Protection.py
│ ├── SharksAndMinnows.py
│ ├── Siege.py
│ ├── SimonSays.py
│ ├── SnoBallz.json
│ ├── SnoBallz.py
│ ├── SnowBallFight.json
│ ├── SnowBallFight.py
│ ├── WizardWar.json
│ ├── WizardWar.py
│ ├── ZombieHorde.json
│ ├── ZombieHorde.py
│ ├── airStrike.json
│ ├── airStrike.py
│ ├── arms_race.json
│ ├── arms_race.py
│ ├── auto_reloader.json
│ ├── auto_reloader.py
│ ├── bomb_on_my_head.json
│ ├── bomb_on_my_head.py
│ ├── bomberman.json
│ ├── bomberman.py
│ ├── boxing.json
│ ├── boxing.py
│ ├── brainFreeze.json
│ ├── brainFreeze.py
│ ├── bsBoxingOfTheHill.json
│ ├── bsBoxingOfTheHill.py
│ ├── bsKillZone.json
│ ├── bsKillZone.py
│ ├── catch_to_live.json
│ ├── catch_to_live.py
│ ├── fightOfFaith.json
│ ├── fightOfFaith.py
│ ├── frozenone.json
│ ├── frozenone.py
│ ├── iceDeathmatch.json
│ ├── iceDeathmatch.py
│ ├── magic_box.json
│ ├── magic_box.py
│ ├── modManager.json
│ ├── modManager.py
│ ├── puckDeathmatch.json
│ ├── puckDeathmatch.py
│ ├── quickGameButton.json
│ ├── quickGameButton.py
│ ├── settings_patcher.json
│ ├── settings_patcher.py
│ ├── smash.json
│ ├── smash.py
│ ├── snake.json
│ ├── snake.py
│ ├── snowyPowerup.json
│ ├── snowyPowerup.py
│ ├── surviveCurse.json
│ ├── surviveCurse.py
│ ├── ui_wrappers.json
│ └── ui_wrappers.py
├── requirements.txt
├── server/
│ ├── .gitignore
│ ├── Cargo.toml
│ └── src/
│ ├── main.rs
│ └── redis_middleware.rs
├── update_index.py
└── utils/
├── blender/
│ ├── README.md
│ └── bob_plugin.py
├── inject_mod.py
└── installer.py
SYMBOL INDEX (1375 symbols across 53 files)
FILE: mods/AroundTheWorld.py
function bsGetAPIVersion (line 5) | def bsGetAPIVersion():
function bsGetGames (line 9) | def bsGetGames():
class AroundTheWorld (line 12) | class AroundTheWorld(bs.TeamGameActivity):
method getName (line 15) | def getName(cls):
method getDescription (line 19) | def getDescription(cls,sessionType):
method getScoreInfo (line 23) | def getScoreInfo(cls):
method supportsSessionType (line 29) | def supportsSessionType(cls,sessionType):
method getSupportedMaps (line 34) | def getSupportedMaps(cls,sessionType):
method getSettings (line 38) | def getSettings(cls,sessionType):
method __init__ (line 50) | def __init__(self,settings):
method getInstanceDescription (line 74) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 83) | def getInstanceScoreBoardDescription(self):
method spawnPlayerSpaz (line 88) | def spawnPlayerSpaz(self,player,position=(0,0,0),angle=None):
method onTransitionIn (line 123) | def onTransitionIn(self):
method _flashPlayer (line 130) | def _flashPlayer(self,player,scale):
method onTeamJoin (line 141) | def onTeamJoin(self,team):
method onPlayerJoin (line 147) | def onPlayerJoin(self,player):
method onPlayerLeave (line 155) | def onPlayerLeave(self,player):
method _updateScoreBoard (line 172) | def _updateScoreBoard(self):
method onBegin (line 184) | def onBegin(self):
method _doLight1 (line 232) | def _doLight1(self):
method _doLight2 (line 235) | def _doLight2(self):
method _doLight3 (line 238) | def _doLight3(self):
method _startRace (line 241) | def _startRace(self):
method checkPt (line 252) | def checkPt(self,player):
method checkEnd (line 282) | def checkEnd(self):
method killPlayer (line 289) | def killPlayer(self,player):
method endGame (line 293) | def endGame(self):
method handleMessage (line 302) | def handleMessage(self,m):
FILE: mods/BackToYou.py
function bsGetAPIVersion (line 6) | def bsGetAPIVersion():
function bsGetGames (line 10) | def bsGetGames():
class Icon (line 14) | class Icon(bs.Actor):
method __init__ (line 16) | def __init__(self,player,position,scale,showLives=True,showDeath=True,
method setPositionAndScale (line 64) | def setPositionAndScale(self,position,scale):
method updateForLives (line 73) | def updateForLives(self):
method handlePlayerSpawned (line 94) | def handlePlayerSpawned(self):
method handlePlayerDied (line 99) | def handlePlayerDied(self):
class PlayerSpaz_BTY (line 107) | class PlayerSpaz_BTY(bs.PlayerSpaz):
method handleMessage (line 108) | def handleMessage(self, m):
class BackToYou (line 151) | class BackToYou(bs.TeamGameActivity):
method getName (line 154) | def getName(cls):
method getScoreInfo (line 158) | def getScoreInfo(cls):
method getDescription (line 165) | def getDescription(cls,sessionType):
method supportsSessionType (line 169) | def supportsSessionType(cls,sessionType):
method getSupportedMaps (line 174) | def getSupportedMaps(cls,sessionType):
method getSettings (line 178) | def getSettings(cls,sessionType):
method __init__ (line 192) | def __init__(self,settings):
method getInstanceDescription (line 205) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 208) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 211) | def onTransitionIn(self):
method onTeamJoin (line 215) | def onTeamJoin(self,team):
method onPlayerJoin (line 219) | def onPlayerJoin(self, player):
method _updateSoloMode (line 237) | def _updateSoloMode(self):
method _updateIcons (line 248) | def _updateIcons(self):
method _getSpawnPoint (line 309) | def _getSpawnPoint(self,player):
method spawnPlayer (line 335) | def spawnPlayer(self,player):
method _printLives (line 407) | def _printLives(self,player):
method onPlayerLeave (line 416) | def onPlayerLeave(self,player):
method onBegin (line 433) | def onBegin(self):
method _getTotalTeamLives (line 473) | def _getTotalTeamLives(self,team):
method handleMessage (line 476) | def handleMessage(self,m):
method _update (line 527) | def _update(self):
method _getLivingTeams (line 548) | def _getLivingTeams(self):
method endGame (line 551) | def endGame(self):
FILE: mods/Basketball.py
function bsGetAPIVersion (line 11) | def bsGetAPIVersion():
function bsGetGames (line 14) | def bsGetGames():
class ImpactMessage (line 17) | class ImpactMessage(object):
class Referee (line 20) | class Referee(bs.SpazBot):
class Hoop (line 31) | class Hoop(bs.Actor):
method __init__ (line 32) | def __init__(self,position=(0,5,-8),color=(1,1,1)):
class ThreePointLine (line 59) | class ThreePointLine(bs.Actor):
method __init__ (line 60) | def __init__(self):
class BasketBallFactory (line 67) | class BasketBallFactory(bs.BombFactory):
method __init__ (line 68) | def __init__(self):
class Baller (line 78) | class Baller(bs.PlayerSpaz):
method onBombPress (line 80) | def onBombPress(self):
method onPickUpPress (line 83) | def onPickUpPress(self):
class BasketBomb (line 87) | class BasketBomb(bs.Bomb):
method __init__ (line 88) | def __init__(self,position=(0,1,0),velocity=(0,0,0),bombType='normal',...
method handleMessage (line 117) | def handleMessage(self, m):
class Basketball (line 135) | class Basketball(bs.TeamGameActivity):
method getName (line 137) | def getName(cls):
method getDescription (line 141) | def getDescription(cls, sessionType):
method getScoreInfo (line 145) | def getScoreInfo(cls):
method getSettings (line 149) | def getSettings(cls, sessionType):
method getSupportedMaps (line 164) | def getSupportedMaps(cls, sessionType):
method supportsSessionType (line 168) | def supportsSessionType(cls, sessionType):
method __init__ (line 171) | def __init__(self,settings):
method onTransitionIn (line 202) | def onTransitionIn(self):
method onBegin (line 205) | def onBegin(self):
method spawnPlayerSpaz (line 219) | def spawnPlayerSpaz(self,player,position=(0,5,-3),angle=None, killedDu...
method respawnBall (line 235) | def respawnBall(self, owner):
method handleMessage (line 243) | def handleMessage(self, m):
method giveFoulShots (line 277) | def giveFoulShots(self, player):
method continueFoulShots (line 300) | def continueFoulShots(self, player):
method continuePlay (line 312) | def continuePlay(self):
method foulOut (line 324) | def foulOut(self, player):
method jumpBall (line 328) | def jumpBall(self):
method handleShot (line 340) | def handleShot(self, ball):
method checkThreePoint (line 383) | def checkThreePoint(self, ball):
method isTendingGoal (line 388) | def isTendingGoal(self,ball):
method updateScore (line 394) | def updateScore(self):
method checkEnd (line 399) | def checkEnd(self):
method endGame (line 407) | def endGame(self):
FILE: mods/BuddyBunny.py
class BunnyBuddyBot (line 7) | class BunnyBuddyBot(bsSpaz.SpazBot):
method __init__ (line 29) | def __init__(self,player):
class BunnyBotSet (line 58) | class BunnyBotSet(bsSpaz.BotSet):
method __init__ (line 64) | def __init__(self, sourcePlayer):
method doBunny (line 79) | def doBunny(self):
method startMovingBunnies (line 82) | def startMovingBunnies(self):
method _spawnBot (line 85) | def _spawnBot(self,botType,pos,onSpawnCall):
method _bUpdate (line 95) | def _bUpdate(self):
method setupBunny (line 133) | def setupBunny(self, spaz):
method setBunnyText (line 138) | def setBunnyText(self, spaz):
FILE: mods/Collector.py
function bsGetAPIVersion (line 23) | def bsGetAPIVersion():
function bsGetGames (line 26) | def bsGetGames():
class CollectorGame (line 29) | class CollectorGame(bs.TeamGameActivity):
method getName (line 43) | def getName(cls):
method getDescription (line 47) | def getDescription(cls,sessionType):
method onBegin (line 51) | def onBegin(self):
method supportsSessionType (line 87) | def supportsSessionType(cls,sessionType):
method getSupportedMaps (line 92) | def getSupportedMaps(cls,sessionType):
method getSettings (line 96) | def getSettings(cls,sessionType):
method __init__ (line 107) | def __init__(self,settings):
method getInstanceDescription (line 139) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 142) | def getInstanceScoreBoardDescription(self):
method onTeamJoin (line 145) | def onTeamJoin(self,team):
method onPlayerJoin (line 149) | def onPlayerJoin(self,player):
method spawnPlayer (line 154) | def spawnPlayer(self,player):
method _tick (line 159) | def _tick(self):
method endGame (line 184) | def endGame(self):
method _updateFlagState (line 189) | def _updateFlagState(self):
method _handlePlayerFlagRegionCollide (line 211) | def _handlePlayerFlagRegionCollide(self,colliding):
method _updateScoreBoard (line 223) | def _updateScoreBoard(self):
method onTransitionIn (line 227) | def onTransitionIn(self):
method _updateScoreBoard (line 230) | def _updateScoreBoard(self):
method _onCapsulePlayerCollide (line 234) | def _onCapsulePlayerCollide(self):
method _handleCapsuleStorage (line 269) | def _handleCapsuleStorage(self,pos,player):
method handleMessage (line 299) | def handleMessage(self,m):
class Capsule (line 334) | class Capsule(bs.Actor):
method __init__ (line 336) | def __init__(self, position=(0,1,0), velocity=(0,0.5,0),lucky=False):
method handleMessage (line 391) | def handleMessage(self,m):
FILE: mods/FillErUp.py
function bsGetAPIVersion (line 7) | def bsGetAPIVersion():
function bsGetGames (line 11) | def bsGetGames():
class cargoBox (line 15) | class cargoBox(bs.Bomb):
method __init__ (line 17) | def __init__(self,pos):
method handleMessage (line 31) | def handleMessage(self,m):
method setboxScoreText (line 49) | def setboxScoreText(self,t,color=(1,1,0.4),flash=False):
method setMovingText (line 92) | def setMovingText(self, theActor, theText, color):
class FillErUp (line 107) | class FillErUp(bs.TeamGameActivity):
method getName (line 110) | def getName(cls):
method getScoreInfo (line 114) | def getScoreInfo(cls):
method getDescription (line 121) | def getDescription(cls,sessionType):
method supportsSessionType (line 125) | def supportsSessionType(cls,sessionType):
method getSupportedMaps (line 129) | def getSupportedMaps(cls,sessionType):
method getSettings (line 133) | def getSettings(cls,sessionType):
method __init__ (line 149) | def __init__(self,settings):
method getInstanceDescription (line 187) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 190) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 193) | def onTransitionIn(self):
method onTeamJoin (line 197) | def onTeamJoin(self,team):
method onPlayerJoin (line 203) | def onPlayerJoin(self, player):
method _updateSoloMode (line 224) | def _updateSoloMode(self):
method _getSpawnPoint (line 235) | def _getSpawnPoint(self,player):
method spawnPlayer (line 260) | def spawnPlayer(self,player):
method _printLives (line 290) | def _printLives(self,player):
method onPlayerLeave (line 299) | def onPlayerLeave(self,player):
method onBegin (line 313) | def onBegin(self):
method _getTotalTeamLives (line 353) | def _getTotalTeamLives(self,team):
method handleMessage (line 356) | def handleMessage(self,m):
method _update (line 370) | def _update(self):
method boxSpawn (line 389) | def boxSpawn(self):
method getRandomPowerupPoint (line 423) | def getRandomPowerupPoint(self):
method _getLivingTeams (line 440) | def _getLivingTeams(self):
method _updateScoreBoard (line 442) | def _updateScoreBoard(self):
method endGame (line 445) | def endGame(self):
FILE: mods/FlagDay.py
class FlagBearer (line 13) | class FlagBearer(bs.PlayerSpaz):
method handleMessage (line 14) | def handleMessage(self, m):
function bsGetAPIVersion (line 29) | def bsGetAPIVersion():
function bsGetGames (line 33) | def bsGetGames():
function bsGetLevels (line 37) | def bsGetLevels():
class FlagDay (line 45) | class FlagDay(bs.TeamGameActivity):
method __init__ (line 47) | def __init__(self,settings):
method getName (line 63) | def getName(cls):
method getScoreInfo (line 68) | def getScoreInfo(cls):
method getDescription (line 73) | def getDescription(cls,sessionType):
method getSupportedMaps (line 78) | def getSupportedMaps(cls,sessionType):
method supportsSessionType (line 83) | def supportsSessionType(cls,sessionType):
method onTransitionIn (line 87) | def onTransitionIn(self):
method onPlayerJoin (line 91) | def onPlayerJoin(self, player):
method onPlayerLeave (line 97) | def onPlayerLeave(self, player):
method onBegin (line 104) | def onBegin(self):
method handleMessage (line 137) | def handleMessage(self,m):
method spawnPlayerSpaz (line 174) | def spawnPlayerSpaz(self,player,position=(0,0,0),angle=None):
method resetFlags (line 205) | def resetFlags(self):
method killFlags (line 217) | def killFlags(self):
method setupNextRound (line 228) | def setupNextRound(self):
method givePrize (line 253) | def givePrize(self, prize):
method updateScore (line 323) | def updateScore(self):
method checkBots (line 327) | def checkBots(self):
method makeLandMines (line 331) | def makeLandMines(self):
method givePoints (line 337) | def givePoints(self):
method makeHealthBox (line 342) | def makeHealthBox(self, position=(0,3,0)):
method makeBomb (line 350) | def makeBomb(self,xpos,zpos):
method setupBR (line 354) | def setupBR(self):
method makeBombRow (line 358) | def makeBombRow(self, num):
method setupROF (line 367) | def setupROF(self):
method makeBlastRing (line 371) | def makeBlastRing(self,length):
method checkEnd (line 387) | def checkEnd(self):
method endGame (line 393) | def endGame(self):
FILE: mods/GravityFalls.py
function bsGetAPIVersion (line 5) | def bsGetAPIVersion():
function bsGetGames (line 8) | def bsGetGames():
class FlyMessage (line 11) | class FlyMessage(object):
class Icon (line 14) | class Icon(bs.Actor):
method __init__ (line 16) | def __init__(self,player,position,scale,showLives=True,showDeath=True,
method setPositionAndScale (line 64) | def setPositionAndScale(self,position,scale):
method updateForLives (line 73) | def updateForLives(self):
method handlePlayerSpawned (line 85) | def handlePlayerSpawned(self):
method handlePlayerDied (line 90) | def handlePlayerDied(self):
class AntiGravityPlayerSpaz (line 98) | class AntiGravityPlayerSpaz(bs.PlayerSpaz):
method handleMessage (line 99) | def handleMessage(self,m):
class GravityFalls (line 109) | class GravityFalls(bs.TeamGameActivity):
method getName (line 112) | def getName(cls):
method getScoreInfo (line 116) | def getScoreInfo(cls):
method getDescription (line 122) | def getDescription(cls,sessionType):
method supportsSessionType (line 126) | def supportsSessionType(cls,sessionType):
method getSupportedMaps (line 131) | def getSupportedMaps(cls,sessionType):
method getSettings (line 135) | def getSettings(cls,sessionType):
method __init__ (line 149) | def __init__(self,settings):
method getInstanceDescription (line 170) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 173) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 176) | def onTransitionIn(self):
method onTeamJoin (line 180) | def onTeamJoin(self,team):
method _updateSoloMode (line 184) | def _updateSoloMode(self):
method _updateIcons (line 195) | def _updateIcons(self):
method _getSpawnPoint (line 256) | def _getSpawnPoint(self,player):
method spawnPlayer (line 282) | def spawnPlayer(self,player):
method spawnPlayerSpaz (line 292) | def spawnPlayerSpaz(self,player,position=(0,0,0),angle=None):
method _printLives (line 321) | def _printLives(self,player):
method onPlayerJoin (line 330) | def onPlayerJoin(self, player):
method onPlayerLeave (line 359) | def onPlayerLeave(self,player):
method raisePlayer (line 373) | def raisePlayer(self, player):
method onBegin (line 381) | def onBegin(self):
method _getTotalTeamLives (line 421) | def _getTotalTeamLives(self,team):
method handleMessage (line 424) | def handleMessage(self,m):
method _update (line 459) | def _update(self):
method _getLivingTeams (line 480) | def _getLivingTeams(self):
method endGame (line 483) | def endGame(self):
FILE: mods/Greed.py
function bsGetAPIVersion (line 7) | def bsGetAPIVersion():
function bsGetGames (line 11) | def bsGetGames():
class PlayerSpaz_Greed (line 14) | class PlayerSpaz_Greed(bs.PlayerSpaz):
method handleMessage (line 15) | def handleMessage(self, m):
class Greed (line 256) | class Greed(bs.TeamGameActivity):
method getName (line 259) | def getName(cls):
method getScoreInfo (line 263) | def getScoreInfo(cls):
method getDescription (line 270) | def getDescription(cls,sessionType):
method supportsSessionType (line 274) | def supportsSessionType(cls,sessionType):
method getSupportedMaps (line 279) | def getSupportedMaps(cls,sessionType):
method getSettings (line 283) | def getSettings(cls,sessionType):
method __init__ (line 299) | def __init__(self,settings):
method getInstanceDescription (line 310) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 313) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 316) | def onTransitionIn(self):
method onTeamJoin (line 320) | def onTeamJoin(self,team):
method onPlayerJoin (line 326) | def onPlayerJoin(self, player):
method _updateSoloMode (line 356) | def _updateSoloMode(self):
method _updateIcons (line 367) | def _updateIcons(self):
method _getSpawnPoint (line 428) | def _getSpawnPoint(self,player):
method spawnPlayer (line 454) | def spawnPlayer(self,player):
method updateSpazScore (line 524) | def updateSpazScore(self,player,spaz):
method _printLives (line 529) | def _printLives(self,player):
method onPlayerLeave (line 538) | def onPlayerLeave(self,player):
method onBegin (line 554) | def onBegin(self):
method _getTotalTeamLives (line 596) | def _getTotalTeamLives(self,team):
method handleMessage (line 599) | def handleMessage(self,m):
method _update (line 643) | def _update(self):
method spewBoxes (line 663) | def spewBoxes(self, pos, boxes):
method spewWithTimer (line 674) | def spewWithTimer(self,pos):
method _standardDropPowerup (line 676) | def _standardDropPowerup(self,index,expire=True): #Overloaded from bsG...
method _getLivingTeams (line 679) | def _getLivingTeams(self):
method _updateScoreBoard (line 681) | def _updateScoreBoard(self):
method endGame (line 684) | def endGame(self):
FILE: mods/GuessTheBomb.py
function bsGetAPIVersion (line 5) | def bsGetAPIVersion():
function bsGetGames (line 8) | def bsGetGames():
function bsGetLevels (line 11) | def bsGetLevels():
class GuessTheBombGame (line 15) | class GuessTheBombGame(bs.TeamGameActivity):
method getName (line 18) | def getName(cls):
method getScoreInfo (line 22) | def getScoreInfo(cls):
method getDescription (line 28) | def getDescription(cls,sessionType):
method getSupportedMaps (line 32) | def getSupportedMaps(cls,sessionType):
method getSettings (line 36) | def getSettings(cls,sessionType):
method supportsSessionType (line 40) | def supportsSessionType(cls,sessionType):
method __init__ (line 45) | def __init__(self,settings):
method onTransitionIn (line 54) | def onTransitionIn(self):
method onBegin (line 57) | def onBegin(self):
method spawnPlayer (line 71) | def spawnPlayer(self,player):
method handleMessage (line 79) | def handleMessage(self,m):
method _checkEndGame (line 98) | def _checkEndGame(self):
method _setMeteorTimer (line 111) | def _setMeteorTimer(self):
method _dropBombCluster (line 114) | def _dropBombCluster(self):
method _dropBomb (line 133) | def _dropBomb(self,position,velocity,bombType):
method _decrementMeteorTime (line 136) | def _decrementMeteorTime(self):
method endGame (line 139) | def endGame(self):
FILE: mods/HazardousCargo.py
function bsGetAPIVersion (line 6) | def bsGetAPIVersion():
function bsGetGames (line 10) | def bsGetGames():
class boxCrossMessage (line 13) | class boxCrossMessage(object):
class myMine (line 16) | class myMine(bs.Bomb):
method __init__ (line 20) | def __init__(self,pos):
method handleMessage (line 24) | def handleMessage(self,m):
class cargoBox (line 39) | class cargoBox(bs.Bomb):
method __init__ (line 41) | def __init__(self,pos):
method handleMessage (line 51) | def handleMessage(self,m):
method _updateBoxState (line 68) | def _updateBoxState(self):
class HazardousCargo (line 97) | class HazardousCargo(bs.TeamGameActivity):
method getName (line 100) | def getName(cls):
method getScoreInfo (line 104) | def getScoreInfo(cls):
method supportsSessionType (line 111) | def supportsSessionType(cls,sessionType):
method getDescription (line 117) | def getDescription(cls,sessionType):
method getSupportedMaps (line 121) | def getSupportedMaps(cls,sessionType):
method getSettings (line 125) | def getSettings(cls,sessionType):
method __init__ (line 138) | def __init__(self,settings):
method getInstanceDescription (line 157) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 160) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 165) | def onTransitionIn(self):
method onBegin (line 169) | def onBegin(self):
method updateBoxTimer (line 197) | def updateBoxTimer(self):
method updateBoxes (line 199) | def updateBoxes(self):
method onTeamJoin (line 208) | def onTeamJoin(self,team):
method checkForScore (line 214) | def checkForScore(self, box):
method _update (line 241) | def _update(self):
method mineUpdate (line 247) | def mineUpdate(self):
method _makeMine (line 262) | def _makeMine(self,posn):
method _flashMine (line 268) | def _flashMine(self,pos):
method endGame (line 278) | def endGame(self):
method _flashPlayer (line 283) | def _flashPlayer(self,player,scale):
method _updateScoreBoard (line 293) | def _updateScoreBoard(self):
method handleMessage (line 298) | def handleMessage(self,m):
method spawnPlayer (line 308) | def spawnPlayer(self,player):
FILE: mods/Infection.py
function bsGetAPIVersion (line 7) | def bsGetAPIVersion():
function bsGetGames (line 11) | def bsGetGames():
function bsGetLevels (line 14) | def bsGetLevels():
class PlayerSpaz_Infection (line 18) | class PlayerSpaz_Infection(bs.PlayerSpaz):
method handleMessage (line 19) | def handleMessage(self, m):
class myMine (line 29) | class myMine(bs.Bomb):
method __init__ (line 31) | def __init__(self,pos):
method handleMessage (line 39) | def handleMessage(self,m):
class Infection (line 50) | class Infection(bs.TeamGameActivity):
method getName (line 53) | def getName(cls):
method getScoreInfo (line 57) | def getScoreInfo(cls):
method supportsSessionType (line 63) | def supportsSessionType(cls, sessionType):
method getDescription (line 69) | def getDescription(cls,sessionType):
method getSupportedMaps (line 73) | def getSupportedMaps(cls,sessionType):
method getSettings (line 77) | def getSettings(cls,sessionType):
method __init__ (line 87) | def __init__(self,settings):
method getInstanceDescription (line 101) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 104) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 107) | def onTransitionIn(self):
method onBegin (line 111) | def onBegin(self):
method onPlayerJoin (line 124) | def onPlayerJoin(self, player):
method onPlayerLeave (line 134) | def onPlayerLeave(self, player):
method maxMineUpdate (line 140) | def maxMineUpdate(self):
method maxSizeUpdate (line 143) | def maxSizeUpdate(self):
method mineUpdate (line 146) | def mineUpdate(self):
method _makeMine (line 175) | def _makeMine(self,posn):
method _flashMine (line 181) | def _flashMine(self,pos):
method endGame (line 191) | def endGame(self):
method _flashPlayer (line 196) | def _flashPlayer(self,player,scale):
method handleMessage (line 207) | def handleMessage(self,m):
method _checkEndGame (line 231) | def _checkEndGame(self):
method spawnPlayer (line 245) | def spawnPlayer(self, player):
method spawnPlayerSpaz (line 258) | def spawnPlayerSpaz(self,player,position=(0,0,0),angle=None):
method getRandomPowerupPoint (line 301) | def getRandomPowerupPoint(self):
method endGame (line 342) | def endGame(self):
FILE: mods/JumpingContest.py
function bsGetAPIVersion (line 8) | def bsGetAPIVersion():
function bsGetGames (line 11) | def bsGetGames():
function bsGetLevels (line 14) | def bsGetLevels():
class RaceTimer (line 22) | class RaceTimer:
method __init__ (line 24) | def __init__(self, incTime=1000):
method start (line 48) | def start(self):
method _doLight1 (line 51) | def _doLight1(self):
method _doLight2 (line 55) | def _doLight2(self):
method _doLight3 (line 59) | def _doLight3(self):
method _doLight4 (line 63) | def _doLight4(self):
method onFinish (line 73) | def onFinish(self):
method onIncrement (line 76) | def onIncrement(self):
method increment (line 79) | def increment(self):
class JumpSpaz (line 85) | class JumpSpaz(bs.PlayerSpaz):
method onMove (line 86) | def onMove(self,x,y):
method onMoveLeftRight (line 88) | def onMoveLeftRight(self,value):
method onMoveUpDown (line 90) | def onMoveUpDown(self,value):
method onPunchPress (line 92) | def onPunchPress(self):
method onJumpPress (line 94) | def onJumpPress(self):
class JumpingContest (line 98) | class JumpingContest(bs.TeamGameActivity):
method getName (line 101) | def getName(cls):
method getDescription (line 105) | def getDescription(cls, sessionType):
method getScoreInfo (line 109) | def getScoreInfo(cls):
method getSettings (line 113) | def getSettings(cls, sessionType):
method getSupportedMaps (line 117) | def getSupportedMaps(cls, sessionType):
method supportsSessionType (line 123) | def supportsSessionType(cls, sessionType):
method __init__ (line 126) | def __init__(self,settings):
method onTransitionIn (line 145) | def onTransitionIn(self):
method getInstanceScoreBoardDescription (line 148) | def getInstanceScoreBoardDescription(self):
method onBegin (line 151) | def onBegin(self):
method onPlayerJoin (line 159) | def onPlayerJoin(self, player):
method spawnPlayerSpaz (line 166) | def spawnPlayerSpaz(self,player,position=(0,0,0),angle=None):
method handleMessage (line 181) | def handleMessage(self, m):
method updateScore (line 187) | def updateScore(self):
method startJump (line 191) | def startJump(self):
method doRaceTimer (line 198) | def doRaceTimer(self):
method setStartHeight (line 203) | def setStartHeight(self, player):
method setEndHeight (line 208) | def setEndHeight(self,player):
method backupEnd (line 215) | def backupEnd(self):
method endGame (line 218) | def endGame(self):
FILE: mods/LandGrab.py
function bsGetAPIVersion (line 9) | def bsGetAPIVersion():
function bsGetGames (line 13) | def bsGetGames():
class PlayerSpaz_Grab (line 16) | class PlayerSpaz_Grab(bs.PlayerSpaz):
method dropBomb (line 18) | def dropBomb(self):
method unCrossBillboard (line 79) | def unCrossBillboard(self):
method onPunchPress (line 82) | def onPunchPress(self):
method handleMessage (line 107) | def handleMessage(self, m):
class myMine (line 119) | class myMine(bs.Bomb):
method __init__ (line 121) | def __init__(self,pos,vel,bRad,sPlay,own):
method handleMessage (line 135) | def handleMessage(self,m):
method activateArea (line 162) | def activateArea(self):
method _handleHit (line 217) | def _handleHit(self,m):
method _handleImpact (line 244) | def _handleImpact(self,m):
class Egg (line 264) | class Egg(bs.Actor):
method __init__ (line 266) | def __init__(self, position=(0,1,0), sourcePlayer=None, owner=None):
method handleMessage (line 290) | def handleMessage(self,m):
method _handleDropped (line 303) | def _handleDropped(self,m):
method _disappear (line 306) | def _disappear(self):
method setupFrosty (line 318) | def setupFrosty(self,spaz):
class zBotSet (line 324) | class zBotSet(bs.BotSet): #the botset is overloaded to prevent adding ...
method startMoving (line 325) | def startMoving(self): #here we overload the default startMoving, whic...
method zUpdate (line 329) | def zUpdate(self):
class ToughGuyFrostBot (line 358) | class ToughGuyFrostBot(bsSpaz.SpazBot):
method handleMessage (line 374) | def handleMessage(self,m):
class LandGrab (line 380) | class LandGrab(bs.TeamGameActivity):
method getName (line 383) | def getName(cls):
method getScoreInfo (line 387) | def getScoreInfo(cls):
method supportsSessionType (line 394) | def supportsSessionType(cls, sessionType):
method getDescription (line 398) | def getDescription(cls,sessionType):
method getSupportedMaps (line 402) | def getSupportedMaps(cls,sessionType):
method getSettings (line 406) | def getSettings(cls,sessionType):
method __init__ (line 418) | def __init__(self,settings):
method getInstanceDescription (line 444) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 447) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 450) | def onTransitionIn(self):
method onBegin (line 454) | def onBegin(self):
method onTeamJoin (line 463) | def onTeamJoin(self,team):
method onPlayerJoin (line 467) | def onPlayerJoin(self, player):
method onPlayerLeave (line 482) | def onPlayerLeave(self, player):
method startUpdating (line 491) | def startUpdating(self):
method _updateScoreBoard (line 494) | def _updateScoreBoard(self):
method mineUpdate (line 499) | def mineUpdate(self):
method endGame (line 524) | def endGame(self):
method _flashPlayer (line 529) | def _flashPlayer(self,player,scale):
method handleMessage (line 540) | def handleMessage(self,m):
method _checkEndGame (line 567) | def _checkEndGame(self):
method spawnPlayer (line 581) | def spawnPlayer(self, player):
method spawnPlayerSpaz (line 621) | def spawnPlayerSpaz(self,player,position=(0,0,0),angle=None):
method getRandomPowerupPoint (line 669) | def getRandomPowerupPoint(self):
method areaCalc (line 711) | def areaCalc(self,team,res):
method endGame (line 747) | def endGame(self):
method waitForScores (line 756) | def waitForScores(self):
FILE: mods/Paint.py
function bsGetAPIVersion (line 6) | def bsGetAPIVersion():
function bsGetGames (line 9) | def bsGetGames():
function bsGetLevels (line 12) | def bsGetLevels():
class Dot (line 20) | class Dot(bs.Actor):
method __init__ (line 21) | def __init__(self, position=(0,0,0), color=(0,0,0), radius=(.5)):
class Artist (line 33) | class Artist(bs.PlayerSpaz):
method __init__ (line 34) | def __init__(self, color=(1,1,1), highlight=(0.5,0.5,0.5), character="...
method onBombPress (line 46) | def onBombPress(self):
method onPunchPress (line 68) | def onPunchPress(self):
method onJumpPress (line 88) | def onJumpPress(self):
method onPickUpPress (line 97) | def onPickUpPress(self):
class Paint (line 102) | class Paint(bs.CoopGameActivity):
method getName (line 105) | def getName(cls):
method getScoreInfo (line 109) | def getScoreInfo(cls):
method getDescription (line 113) | def getDescription(cls,sessionType):
method getSupportedMaps (line 117) | def getSupportedMaps(cls,sessionType):
method supportsSessionType (line 122) | def supportsSessionType(cls,sessionType):
method __init__ (line 125) | def __init__(self, settings):
method onTransitionIn (line 139) | def onTransitionIn(self):
method onBegin (line 142) | def onBegin(self):
method spawnPlayerSpaz (line 145) | def spawnPlayerSpaz(self,player,position=(0,5,-3),angle=None):
FILE: mods/Portal.py
class Portal (line 13) | class Portal(bs.Actor):
method __init__ (line 14) | def __init__(self,position1 = (0,1,0),color = (random.random(),random....
method Portal1 (line 62) | def Portal1(self):
method Portal2 (line 66) | def Portal2(self):
method objPortal1 (line 70) | def objPortal1(self):
method objPortal2 (line 74) | def objPortal2(self):
method delete (line 78) | def delete(self):
method posn (line 88) | def posn(self, s , act):
method getRandomPosition (line 98) | def getRandomPosition(self, activity):
FILE: mods/Protection.py
function bsGetAPIVersion (line 5) | def bsGetAPIVersion():
function bsGetGames (line 9) | def bsGetGames():
class SpazClone (line 12) | class SpazClone(bs.SpazBot):
method __init__ (line 14) | def __init__(self, player):
method setMovingText (line 21) | def setMovingText(self, theActor, theText, color):
class myBots (line 35) | class myBots(bs.BotSet):
method spawnCBot (line 37) | def spawnCBot(self,player,botType,pos,spawnTime=3000,onSpawnCall=None):
method _spawnCBot (line 44) | def _spawnCBot(self,player,botType,pos,onSpawnCall):
class Icon (line 55) | class Icon(bs.Actor):
method __init__ (line 57) | def __init__(self,player,position,scale,showLives=True,showDeath=True,
method setPositionAndScale (line 105) | def setPositionAndScale(self,position,scale):
method updateForLives (line 114) | def updateForLives(self):
method handlePlayerSpawned (line 126) | def handlePlayerSpawned(self):
method handlePlayerDied (line 131) | def handlePlayerDied(self):
class ProtectionGame (line 140) | class ProtectionGame(bs.TeamGameActivity):
method getName (line 143) | def getName(cls):
method getScoreInfo (line 147) | def getScoreInfo(cls):
method getDescription (line 153) | def getDescription(cls,sessionType):
method supportsSessionType (line 157) | def supportsSessionType(cls,sessionType):
method getSupportedMaps (line 162) | def getSupportedMaps(cls,sessionType):
method getSettings (line 166) | def getSettings(cls,sessionType):
method __init__ (line 180) | def __init__(self,settings):
method getInstanceDescription (line 193) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 196) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 199) | def onTransitionIn(self):
method onTeamJoin (line 203) | def onTeamJoin(self,team):
method onPlayerJoin (line 207) | def onPlayerJoin(self, player):
method _updateSoloMode (line 238) | def _updateSoloMode(self):
method _updateIcons (line 249) | def _updateIcons(self):
method _getSpawnPoint (line 310) | def _getSpawnPoint(self,player):
method spawnPlayer (line 336) | def spawnPlayer(self,player):
method spawnPlayerByDummy (line 344) | def spawnPlayerByDummy(self,player):
method spawnDummy (line 362) | def spawnDummy(self,player, myClone):
method setSpawnTime (line 377) | def setSpawnTime(self,spaz):
method setSafeSpawn (line 384) | def setSafeSpawn(self, spaz):
method _printLives (line 389) | def _printLives(self,player):
method onPlayerLeave (line 398) | def onPlayerLeave(self,player):
method onBegin (line 413) | def onBegin(self):
method _getTotalTeamLives (line 462) | def _getTotalTeamLives(self,team):
method handleMessage (line 465) | def handleMessage(self,m):
method _update (line 516) | def _update(self):
method _getLivingTeams (line 537) | def _getLivingTeams(self):
method endGame (line 540) | def endGame(self):
FILE: mods/SharksAndMinnows.py
function bsGetAPIVersion (line 7) | def bsGetAPIVersion():
function bsGetGames (line 10) | def bsGetGames():
class Minnow (line 13) | class Minnow(bs.PlayerSpaz):
method handleMessage (line 16) | def handleMessage(self, m):
class Shark (line 23) | class Shark(bs.PlayerSpaz):
method handleMessage (line 25) | def handleMessage(self, m):
class SharksAndMinnows (line 35) | class SharksAndMinnows(bs.TeamGameActivity):
method getName (line 38) | def getName(cls):
method getDescription (line 42) | def getDescription(cls, sessionType):
method getScoreInfo (line 46) | def getScoreInfo(cls):
method getSupportedMaps (line 50) | def getSupportedMaps(cls, sessionType):
method supportsSessionType (line 54) | def supportsSessionType(cls, sessionType):
method __init__ (line 57) | def __init__(self,settings):
method getInstanceScoreBoardDescription (line 95) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 98) | def onTransitionIn(self):
method onBegin (line 101) | def onBegin(self):
method setupSharks (line 115) | def setupSharks(self, player):
method respawnPlayer (line 118) | def respawnPlayer(self, player):
method spawnPlayerSpaz (line 124) | def spawnPlayerSpaz(self,player,position=(-10,1,0),angle=None):
method sharkify (line 145) | def sharkify(self, player):
method onPlayerJoin (line 160) | def onPlayerJoin(self, player):
method updateScore (line 165) | def updateScore(self):
method handleSafeZoneEnter (line 169) | def handleSafeZoneEnter(self):
method handleMessage (line 189) | def handleMessage(self,m):
method checkEnd (line 197) | def checkEnd(self):
method endGame (line 217) | def endGame(self):
FILE: mods/Siege.py
function bsGetAPIVersion (line 6) | def bsGetAPIVersion():
function bsGetGames (line 9) | def bsGetGames():
class SiegePowerupFactory (line 12) | class SiegePowerupFactory(bs.PowerupFactory):
method getRandomPowerupType (line 13) | def getRandomPowerupType(self,forceType=None,excludeTypes=['tripleBomb...
class Puck (line 21) | class Puck(bs.Actor): # Borrowed from the hockey game
method __init__ (line 23) | def __init__(self, position=(0,1,0)):
class Siege (line 53) | class Siege(bs.TeamGameActivity):
method getName (line 55) | def getName(cls):
method getDescription (line 59) | def getDescription(cls, sessionType):
method getScoreInfo (line 63) | def getScoreInfo(cls):
method getSupportedMaps (line 67) | def getSupportedMaps(cls, sessionType):
method supportsSessionType (line 71) | def supportsSessionType(cls, sessionType):
method __init__ (line 74) | def __init__(self,settings):
method onTransitionIn (line 90) | def onTransitionIn(self):
method _standardDropPowerup (line 93) | def _standardDropPowerup(self,index,expire=True):
method onBegin (line 98) | def onBegin(self):
method handleMessage (line 108) | def handleMessage(self,m):
method endGame (line 116) | def endGame(self, winner):
FILE: mods/SimonSays.py
function bsGetAPIVersion (line 6) | def bsGetAPIVersion():
function bsGetGames (line 9) | def bsGetGames():
class SimonSays (line 12) | class SimonSays(bs.TeamGameActivity):
method getName (line 14) | def getName(cls):
method getDescription (line 18) | def getDescription(cls, sessionType):
method getScoreInfo (line 22) | def getScoreInfo(cls):
method getSettings (line 26) | def getSettings(cls, sessionType):
method getSupportedMaps (line 33) | def getSupportedMaps(cls, sessionType):
method supportsSessionType (line 37) | def supportsSessionType(cls, sessionType):
method __init__ (line 40) | def __init__(self,settings):
method onTransitionIn (line 96) | def onTransitionIn(self):
method onPlayerJoin (line 99) | def onPlayerJoin(self, player):
method onBegin (line 104) | def onBegin(self):
method explainGame (line 115) | def explainGame(self):
method callRound (line 120) | def callRound(self):
method checkRound (line 133) | def checkRound(self):
method inCircle (line 143) | def inCircle(self, pos):
method handleMessage (line 165) | def handleMessage(self, m):
method onPlayerJoin (line 169) | def onPlayerJoin(self, player):
method checkEnd (line 174) | def checkEnd(self):
method endGame (line 180) | def endGame(self):
FILE: mods/SnoBallz.py
class snoMessage (line 13) | class snoMessage(object):
class otherHitMessage (line 16) | class otherHitMessage(object):
class snoBall (line 19) | class snoBall(bs.Actor):
method __init__ (line 21) | def __init__(self, position=(0,1,0), velocity=(5,0,5), sourcePlayer=No...
method handleMessage (line 59) | def handleMessage(self,m):
method doBust (line 130) | def doBust(self):
method calcBust (line 142) | def calcBust(self, oVel):
method _disappear (line 155) | def _disappear(self):
method getFactory (line 162) | def getFactory(cls):
class SnoBallFactory (line 173) | class SnoBallFactory(object):
method __init__ (line 176) | def __init__(self):
method giveBallz (line 214) | def giveBallz(self,spaz):
method takeBallz (line 221) | def takeBallz(self,weakSpaz):
method throwBall (line 225) | def throwBall(self, spaz):
FILE: mods/SnowBallFight.py
function bsGetAPIVersion (line 12) | def bsGetAPIVersion():
function bsGetGames (line 16) | def bsGetGames():
class PlayerSpaz_Sno (line 19) | class PlayerSpaz_Sno(bs.PlayerSpaz):
method handleMessage (line 20) | def handleMessage(self,m):
class SnowBallFightGame (line 27) | class SnowBallFightGame(bs.TeamGameActivity):
method getName (line 30) | def getName(cls):
method getDescription (line 34) | def getDescription(cls,sessionType):
method supportsSessionType (line 38) | def supportsSessionType(cls,sessionType):
method getSupportedMaps (line 43) | def getSupportedMaps(cls,sessionType):
method getSettings (line 47) | def getSettings(cls,sessionType):
method __init__ (line 67) | def __init__(self,settings):
method getInstanceDescription (line 82) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 85) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 88) | def onTransitionIn(self):
method onTeamJoin (line 91) | def onTeamJoin(self,team):
method onBegin (line 95) | def onBegin(self):
method _standardDropPowerup (line 105) | def _standardDropPowerup(self,index,expire=True):
method spawnPlayerSpaz (line 111) | def spawnPlayerSpaz(self,player,position=(0,0,0),angle=None):
method handleMessage (line 156) | def handleMessage(self,m):
method _updateScoreBoard (line 200) | def _updateScoreBoard(self):
method endGame (line 204) | def endGame(self):
FILE: mods/WizardWar.py
function bsGetAPIVersion (line 10) | def bsGetAPIVersion():
function bsGetGames (line 13) | def bsGetGames():
function bsGetLevels (line 16) | def bsGetLevels():
class ExplodeMessage (line 23) | class ExplodeMessage(object):
class ArmMessage (line 25) | class ArmMessage(object):
class WarnMessage (line 27) | class WarnMessage(object):
class DieMessage (line 29) | class DieMessage(object):
class _BombDiedMessage (line 31) | class _BombDiedMessage(object):
class WWBomb (line 37) | class WWBomb(bs.Bomb):
method __init__ (line 39) | def __init__(self,position=(0,1,0),velocity=(0,0,0),bombType='normal',...
method _handleImpact (line 86) | def _handleImpact(self,m):
method handleMessage (line 97) | def handleMessage(self, m):
class WWSpaz (line 104) | class WWSpaz(bs.PlayerSpaz):
method onPunchPress (line 105) | def onPunchPress(self):
class WizardWar (line 108) | class WizardWar(bs.TeamGameActivity):
method getName (line 111) | def getName(cls):
method getDescription (line 115) | def getDescription(cls, sessionType):
method getScoreInfo (line 119) | def getScoreInfo(cls):
method getSettings (line 123) | def getSettings(cls, sessionType):
method getSupportedMaps (line 140) | def getSupportedMaps(cls, sessionType):
method supportsSessionType (line 144) | def supportsSessionType(cls, sessionType):
method __init__ (line 147) | def __init__(self,settings):
method onTransitionIn (line 162) | def onTransitionIn(self):
method onBegin (line 166) | def onBegin(self):
method onPlayerJoin (line 190) | def onPlayerJoin(self, player):
method spawnPlayerSpaz (line 198) | def spawnPlayerSpaz(self,player,position=(0,5,-3),angle=None):
method shootBomb (line 213) | def shootBomb(self, spaz):
method handleMessage (line 226) | def handleMessage(self, m):
method checkEnd (line 237) | def checkEnd(self):
method endGame (line 260) | def endGame(self):
FILE: mods/ZombieHorde.py
function bsGetAPIVersion (line 8) | def bsGetAPIVersion():
function bsGetGames (line 12) | def bsGetGames():
class Icon (line 16) | class Icon(bs.Actor):
method __init__ (line 18) | def __init__(self,player,position,scale,showLives=True,showDeath=True,
method setPositionAndScale (line 66) | def setPositionAndScale(self,position,scale):
method updateForLives (line 75) | def updateForLives(self):
method handlePlayerSpawned (line 87) | def handlePlayerSpawned(self):
method handlePlayerDied (line 92) | def handlePlayerDied(self):
class PlayerSpaz_Zom (line 100) | class PlayerSpaz_Zom(bs.PlayerSpaz):
method handleMessage (line 101) | def handleMessage(self, m):
class PlayerZombie (line 151) | class PlayerZombie(bs.PlayerSpaz):
method handleMessage (line 152) | def handleMessage(self, m):
class zBotSet (line 173) | class zBotSet(bs.BotSet): #the botset is overloaded to prevent adding ...
method startMoving (line 174) | def startMoving(self): #here we overload the default startMoving, whic...
method zUpdate (line 178) | def zUpdate(self):
class ZombieHorde (line 205) | class ZombieHorde(bs.TeamGameActivity):
method getName (line 208) | def getName(cls):
method getScoreInfo (line 212) | def getScoreInfo(cls):
method getDescription (line 219) | def getDescription(cls,sessionType):
method supportsSessionType (line 223) | def supportsSessionType(cls,sessionType):
method getSupportedMaps (line 228) | def getSupportedMaps(cls,sessionType):
method getSettings (line 232) | def getSettings(cls,sessionType):
method __init__ (line 247) | def __init__(self,settings):
method getInstanceDescription (line 286) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 289) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 292) | def onTransitionIn(self):
method onTeamJoin (line 296) | def onTeamJoin(self,team):
method onPlayerJoin (line 301) | def onPlayerJoin(self, player):
method _updateSoloMode (line 330) | def _updateSoloMode(self):
method _updateIcons (line 341) | def _updateIcons(self):
method _getSpawnPoint (line 402) | def _getSpawnPoint(self,player):
method spawnPlayer (line 428) | def spawnPlayer(self,player):
method respawnPlayerZombie (line 501) | def respawnPlayerZombie(self,player,respawnTime=None):
method spawnPlayerIfExistsAsZombie (line 536) | def spawnPlayerIfExistsAsZombie(self,player):
method spawnPlayerZombie (line 545) | def spawnPlayerZombie(self,player):
method _printLives (line 605) | def _printLives(self,player):
method onPlayerLeave (line 618) | def onPlayerLeave(self,player):
method onBegin (line 633) | def onBegin(self):
method _getTotalTeamLives (line 685) | def _getTotalTeamLives(self,team):
method handleMessage (line 688) | def handleMessage(self,m):
method _update (line 734) | def _update(self):
method spawnZombie (line 772) | def spawnZombie(self):
method _onSpazBotDied (line 779) | def _onSpazBotDied(self,DeathMsg):
method getRandomPointInPlay (line 797) | def getRandomPointInPlay(self):
method _updateScoreBoard (line 839) | def _updateScoreBoard(self):
method _getLivingTeams (line 842) | def _getLivingTeams(self):
method endGame (line 845) | def endGame(self):
FILE: mods/airStrike.py
function bsGetAPIVersion (line 4) | def bsGetAPIVersion():
function bsGetGames (line 7) | def bsGetGames():
function bsGetLevels (line 10) | def bsGetLevels():
class AirStrikeGame (line 19) | class AirStrikeGame(bs.TeamGameActivity):
method getName (line 22) | def getName(cls):
method getScoreInfo (line 26) | def getScoreInfo(cls):
method getDescription (line 32) | def getDescription(cls,sessionType):
method getSupportedMaps (line 36) | def getSupportedMaps(cls,sessionType):
method supportsSessionType (line 43) | def supportsSessionType(cls,sessionType):
method __init__ (line 49) | def __init__(self,settings):
method onTransitionIn (line 55) | def onTransitionIn(self):
method onBegin (line 59) | def onBegin(self):
method spawnPlayer (line 88) | def spawnPlayer(self,player):
method _checkIfWon (line 96) | def _checkIfWon(self):
method handleMessage (line 103) | def handleMessage(self,m):
method endGame (line 124) | def endGame(self):
FILE: mods/arms_race.py
class State (line 6) | class State:
method __init__ (line 7) | def __init__(self, bomb=None, grab=False, punch=False, curse=False, re...
method apply (line 19) | def apply(self, spaz):
method getSetting (line 32) | def getSetting(self):
class ArmsRace (line 36) | class ArmsRace(bs.TeamGameActivity):
method getName (line 48) | def getName(cls):
method getScoreInfo (line 52) | def getScoreInfo(cls):
method getDescription (line 58) | def getDescription(cls, sessionType):
method getInstanceDescription (line 61) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 64) | def getInstanceScoreBoardDescription(self):
method supportsSessionType (line 68) | def supportsSessionType(cls, sessionType):
method getSupportedMaps (line 73) | def getSupportedMaps(cls, sessionType):
method getSettings (line 77) | def getSettings(cls, sessionType):
method __init__ (line 87) | def __init__(self, settings):
method onTransitionIn (line 98) | def onTransitionIn(self):
method onBegin (line 102) | def onBegin(self):
method onPlayerJoin (line 107) | def onPlayerJoin(self, player):
method spawnPlayer (line 113) | def spawnPlayer(self, player):
method isValidKill (line 118) | def isValidKill(self, m):
method handleMessage (line 127) | def handleMessage(self,m):
method endGame (line 142) | def endGame(self):
function bsGetAPIVersion (line 150) | def bsGetAPIVersion():
function bsGetGames (line 153) | def bsGetGames():
FILE: mods/auto_reloader.py
function cfg (line 21) | def cfg(key):
class GameWrapper (line 28) | class GameWrapper(object):
method __init__ (line 32) | def __init__(self, filename):
method _import_module (line 43) | def _import_module(self):
method _module_error (line 54) | def _module_error(self, *args):
method _is_available (line 60) | def _is_available(self):
method _prepare_reload (line 93) | def _prepare_reload(self):
method _reload_module (line 104) | def _reload_module(self):
method _check_update (line 118) | def _check_update(self):
method __call__ (line 124) | def __call__(self, *args, **kwargs):
method __getattr__ (line 131) | def __getattr__(self, key):
function check_wrappers (line 151) | def check_wrappers():
function bsGetAPIVersion (line 159) | def bsGetAPIVersion():
function bsGetGames (line 162) | def bsGetGames():
FILE: mods/bomb_on_my_head.py
class PlayerSpazBombOnMyHead (line 7) | class PlayerSpazBombOnMyHead(bs.PlayerSpaz):
method handleMessage (line 9) | def handleMessage(self, m):
method checkAvalibleBombs (line 17) | def checkAvalibleBombs(self):
method startBombChecking (line 24) | def startBombChecking(self):
method dropBomb (line 28) | def dropBomb(self):
function bsGetAPIVersion (line 62) | def bsGetAPIVersion():
function bsGetGames (line 65) | def bsGetGames():
class BombOnMyHead (line 68) | class BombOnMyHead(bs.TeamGameActivity):
method getName (line 71) | def getName(cls):
method getScoreInfo (line 75) | def getScoreInfo(cls):
method getDescription (line 81) | def getDescription(cls, sessionType):
method getInstanceDescription (line 85) | def getInstanceDescription(self):
method supportsSessionType (line 89) | def supportsSessionType(cls, sessionType):
method getSupportedMaps (line 94) | def getSupportedMaps(cls, sessionType):
method getSettings (line 98) | def getSettings(cls,sessionType):
method __init__ (line 105) | def __init__(self, settings):
method onTransitionIn (line 119) | def onTransitionIn(self):
method onBegin (line 122) | def onBegin(self):
method spawnPlayer (line 128) | def spawnPlayer(self, player):
method handleMessage (line 196) | def handleMessage(self,m):
method _checkEndGame (line 219) | def _checkEndGame(self):
method endGame (line 235) | def endGame(self):
FILE: mods/bomberman.py
class Map (line 10) | class Map:
method inBounds (line 15) | def inBounds(cls, pos):
class Crate (line 21) | class Crate(bsBomb.Bomb):
method __init__ (line 22) | def __init__(self, position=(0, 1, 0), velocity=(0, 0, 0)):
method handleMessage (line 29) | def handleMessage(self, m):
method explode (line 37) | def explode(self):
class Bomb (line 42) | class Bomb(bsBomb.Bomb):
method explode (line 43) | def explode(self):
class Blast (line 60) | class Blast(bsBomb.Blast):
method __init__ (line 62) | def __init__(self,position=(0,1,0),velocity=(0,0,0),blastRadius=2.0,bl...
function blast (line 199) | def blast(pos, blastType, sourcePlayer, hitType, hitSubType):
class Player (line 205) | class Player(bs.PlayerSpaz):
method handleMessage (line 213) | def handleMessage(self, m):
method dropBomb (line 224) | def dropBomb(self):
function bsGetAPIVersion (line 261) | def bsGetAPIVersion():
function bsGetGames (line 264) | def bsGetGames():
class Bomberman (line 267) | class Bomberman(bs.TeamGameActivity):
method getName (line 270) | def getName(cls):
method getScoreInfo (line 274) | def getScoreInfo(cls):
method getDescription (line 281) | def getDescription(cls, sessionType):
method getInstanceDescription (line 285) | def getInstanceDescription(self):
method supportsSessionType (line 289) | def supportsSessionType(cls, sessionType):
method getSupportedMaps (line 294) | def getSupportedMaps(cls, sessionType):
method getSettings (line 298) | def getSettings(cls, sessionType):
method __init__ (line 304) | def __init__(self, settings):
method onTransitionIn (line 319) | def onTransitionIn(self):
method onBegin (line 323) | def onBegin(self):
method dropCrate (line 331) | def dropCrate(self, gridX, gridY):
method dropPowerup (line 339) | def dropPowerup(self, position):
method onPlayerJoin (line 343) | def onPlayerJoin(self, player):
method onPlayerLeave (line 346) | def onPlayerLeave(self, player):
method spawnPlayer (line 350) | def spawnPlayer(self, player):
method handleMessage (line 414) | def handleMessage(self,m):
method endGame (line 428) | def endGame(self):
method _getLivingTeams (line 478) | def _getLivingTeams(self):
FILE: mods/boxing.py
function bsGetAPIVersion (line 3) | def bsGetAPIVersion():
function bsGetGames (line 6) | def bsGetGames():
class DeathMatchGame (line 9) | class DeathMatchGame(bs.TeamGameActivity):
method getName (line 12) | def getName(cls):
method getDescription (line 16) | def getDescription(cls,sessionType):
method supportsSessionType (line 22) | def supportsSessionType(cls,sessionType):
method getSupportedMaps (line 27) | def getSupportedMaps(cls,sessionType):
method getSettings (line 31) | def getSettings(cls,sessionType):
method __init__ (line 40) | def __init__(self,settings):
method getInstanceDescription (line 49) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 52) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 55) | def onTransitionIn(self):
method onTeamJoin (line 58) | def onTeamJoin(self,team):
method onBegin (line 62) | def onBegin(self):
method spawnPlayer (line 71) | def spawnPlayer(self,player):
method handleMessage (line 80) | def handleMessage(self,m):
method _updateScoreBoard (line 122) | def _updateScoreBoard(self):
method endGame (line 126) | def endGame(self):
FILE: mods/brainFreeze.py
function bsGetAPIVersion (line 4) | def bsGetAPIVersion():
function bsGetGames (line 7) | def bsGetGames():
function bsGetLevels (line 10) | def bsGetLevels():
class BrainFreezeGame (line 14) | class BrainFreezeGame(bs.TeamGameActivity):
method getName (line 17) | def getName(cls):
method getScoreInfo (line 21) | def getScoreInfo(cls):
method getDescription (line 27) | def getDescription(cls,sessionType):
method getSupportedMaps (line 32) | def getSupportedMaps(cls,sessionType):
method getSettings (line 36) | def getSettings(cls,sessionType):
method supportsSessionType (line 41) | def supportsSessionType(cls,sessionType):
method __init__ (line 46) | def __init__(self,settings):
method onTransitionIn (line 58) | def onTransitionIn(self):
method onBegin (line 63) | def onBegin(self):
method spawnPlayer (line 83) | def spawnPlayer(self,player):
method handleMessage (line 98) | def handleMessage(self,m):
method _checkEndGame (line 122) | def _checkEndGame(self):
method _setMeteorTimer (line 136) | def _setMeteorTimer(self):
method _dropBombCluster (line 139) | def _dropBombCluster(self):
method _dropBomb (line 159) | def _dropBomb(self,position,velocity):
method _decrementMeteorTime (line 162) | def _decrementMeteorTime(self):
method endGame (line 165) | def endGame(self):
FILE: mods/bsBoxingOfTheHill.py
function bsGetAPIVersion (line 4) | def bsGetAPIVersion():
function bsGetGames (line 8) | def bsGetGames():
class BoxingOfTheHillGame (line 11) | class BoxingOfTheHillGame(bs.TeamGameActivity):
method getName (line 19) | def getName(cls):
method getDescription (line 23) | def getDescription(cls,sessionType):
method getScoreInfo (line 27) | def getScoreInfo(cls):
method supportsSessionType (line 31) | def supportsSessionType(cls,sessionType):
method getSupportedMaps (line 36) | def getSupportedMaps(cls,sessionType):
method getSettings (line 40) | def getSettings(cls,sessionType):
method __init__ (line 47) | def __init__(self,settings):
method getInstanceDescription (line 70) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 73) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 76) | def onTransitionIn(self):
method onTeamJoin (line 79) | def onTeamJoin(self,team):
method onPlayerJoin (line 83) | def onPlayerJoin(self,player):
method onBegin (line 87) | def onBegin(self):
method spawnPlayer (line 114) | def spawnPlayer(self,player):
method _tick (line 125) | def _tick(self):
method endGame (line 151) | def endGame(self):
method _updateFlagState (line 156) | def _updateFlagState(self):
method _handlePlayerFlagRegionCollide (line 178) | def _handlePlayerFlagRegionCollide(self,colliding):
method _updateScoreBoard (line 190) | def _updateScoreBoard(self):
method handleMessage (line 194) | def handleMessage(self,m):
FILE: mods/bsKillZone.py
function bsGetAPIVersion (line 5) | def bsGetAPIVersion():
function bsGetGames (line 8) | def bsGetGames():
function bsGetLevels (line 11) | def bsGetLevels():
class KillZoneGame (line 15) | class KillZoneGame(bs.TeamGameActivity):
method getName (line 18) | def getName(cls):
method getDescription (line 22) | def getDescription(cls,sessionType):
method getSupportedMaps (line 26) | def getSupportedMaps(cls,sessionType):
method supportsSessionType (line 30) | def supportsSessionType(cls,sessionType):
method __init__ (line 36) | def __init__(self,settings):
method onTransitionIn (line 41) | def onTransitionIn(self):
method onTeamJoin (line 44) | def onTeamJoin(self,team):
method onBegin (line 48) | def onBegin(self):
method spawnPlayer (line 84) | def spawnPlayer(self,player):
method _spawnTarget (line 103) | def _spawnTarget(self):
method _onSpazDroppedBomb (line 126) | def _onSpazDroppedBomb(self,spaz,bomb):
method _onSpazBotDied (line 131) | def _onSpazBotDied(self,DeathMsg):
method _update (line 157) | def _update(self):
method handleMessage (line 164) | def handleMessage(self,m):
method _updateScoreBoard (line 181) | def _updateScoreBoard(self):
method endGame (line 185) | def endGame(self):
class Target (line 191) | class Target (bs.Actor):
class TargetHitMessage (line 193) | class TargetHitMessage(object):
method __init__ (line 196) | def __init__(self,position):
method exists (line 214) | def exists(self):
method handleMessage (line 217) | def handleMessage(self,m):
method getDistFromPoint (line 224) | def getDistFromPoint(self,pos):
method doHitAtPosition (line 228) | def doHitAtPosition(self,pos,player):
FILE: mods/catch_to_live.py
class CheckNeedNewMadMessage (line 8) | class CheckNeedNewMadMessage(object):
method __init__ (line 9) | def __init__(self, spaz=None):
class ClearProtectMessage (line 13) | class ClearProtectMessage(object):
method __init__ (line 14) | def __init__(self):
class grimPlayer (line 18) | class grimPlayer(bs.PlayerSpaz):
method __init__ (line 19) | def __init__(self, color, highlight, character, player, gameProtection...
method handleMessage (line 34) | def handleMessage(self, m):
method protectAdd (line 64) | def protectAdd(self):
method protectClear (line 75) | def protectClear(self, checkProtectStartTime):
method onMad (line 86) | def onMad(self, madTime=10000):
method stopMad (line 99) | def stopMad(self):
method madExplode (line 106) | def madExplode(self, checkStartTime):
function bsGetAPIVersion (line 112) | def bsGetAPIVersion():
function bsGetGames (line 116) | def bsGetGames():
class CatchToLiveGame (line 120) | class CatchToLiveGame(bs.TeamGameActivity):
method getName (line 122) | def getName(cls):
method getScoreInfo (line 126) | def getScoreInfo(cls):
method getDescription (line 132) | def getDescription(cls, sessionType):
method getSupportedMaps (line 136) | def getSupportedMaps(cls, sessionType):
method getSettings (line 141) | def getSettings(cls, sessionType):
method supportsSessionType (line 152) | def supportsSessionType(cls, sessionType):
method __init__ (line 155) | def __init__(self, settings):
method onTransitionIn (line 167) | def onTransitionIn(self):
method onBegin (line 171) | def onBegin(self):
method updateSpazText (line 193) | def updateSpazText(self):
method spawnPlayer (line 212) | def spawnPlayer(self, player):
method onPlayerJoin (line 263) | def onPlayerJoin(self, player):
method onPlayerLeave (line 274) | def onPlayerLeave(self, player):
method handleMessage (line 281) | def handleMessage(self, m):
method _checkNeedMad (line 307) | def _checkNeedMad(self):
method _checkEndGame (line 324) | def _checkEndGame(self):
method endGame (line 338) | def endGame(self):
FILE: mods/fightOfFaith.py
function bsGetAPIVersion (line 4) | def bsGetAPIVersion():
function bsGetGames (line 10) | def bsGetGames():
function bsGetLevels (line 13) | def bsGetLevels():
class FightOfFaithGame (line 22) | class FightOfFaithGame(bs.TeamGameActivity):
method getName (line 25) | def getName(cls):
method getScoreInfo (line 29) | def getScoreInfo(cls):
method getDescription (line 35) | def getDescription(cls,sessionType):
method getSupportedMaps (line 39) | def getSupportedMaps(cls,sessionType):
method supportsSessionType (line 46) | def supportsSessionType(cls,sessionType):
method __init__ (line 52) | def __init__(self,settings):
method onTransitionIn (line 58) | def onTransitionIn(self):
method onBegin (line 62) | def onBegin(self):
method spawnPlayer (line 91) | def spawnPlayer(self,player):
method _checkIfWon (line 99) | def _checkIfWon(self):
method handleMessage (line 106) | def handleMessage(self,m):
method endGame (line 127) | def endGame(self):
FILE: mods/frozenone.py
function bsGetAPIVersion (line 4) | def bsGetAPIVersion():
function bsGetGames (line 7) | def bsGetGames():
class FrozenOneGame (line 10) | class FrozenOneGame(ChosenOneGame):
method getName (line 13) | def getName(cls):
method getDescription (line 17) | def getDescription(cls,sessionType):
method getSettings (line 22) | def getSettings(cls, sessionType):
method onTeamJoin (line 42) | def onTeamJoin(self,team):
method endGame (line 46) | def endGame(self):
method _setChosenOnePlayer (line 51) | def _setChosenOnePlayer(self, player):
method _updateScoreBoard (line 98) | def _updateScoreBoard(self):
FILE: mods/iceDeathmatch.py
function bsGetAPIVersion (line 4) | def bsGetAPIVersion():
function bsGetGames (line 8) | def bsGetGames():
class IceDeathMatchGame (line 12) | class IceDeathMatchGame(bs.TeamGameActivity):
method getName (line 15) | def getName(cls):
method getDescription (line 19) | def getDescription(cls, sessionType):
method supportsSessionType (line 23) | def supportsSessionType(cls, sessionType):
method getSupportedMaps (line 28) | def getSupportedMaps(cls,sessionType):
method getSettings (line 32) | def getSettings(cls,sessionType):
method __init__ (line 41) | def __init__(self,settings):
method getInstanceDescription (line 50) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 53) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 56) | def onTransitionIn(self):
method onTeamJoin (line 59) | def onTeamJoin(self, team):
method onBegin (line 63) | def onBegin(self):
method spawnPlayer (line 72) | def spawnPlayer(self, player):
method handleMessage (line 91) | def handleMessage(self, m):
method _updateScoreBoard (line 132) | def _updateScoreBoard(self):
method endGame (line 136) | def endGame(self):
FILE: mods/magic_box.py
class MagicBox (line 4) | class MagicBox(bs.Bomb):
method __init__ (line 5) | def __init__(self, position=(0, 1, 0), velocity=(0, 0, 0), bombType='t...
method handleMessage (line 70) | def handleMessage(self, m):
method updateFloatyness (line 83) | def updateFloatyness(self):
method _hideScoreText (line 90) | def _hideScoreText(self):
method setScoreText (line 98) | def setScoreText(self, text):
function bsGetAPIVersion (line 129) | def bsGetAPIVersion():
function bsGetGames (line 133) | def bsGetGames():
class MagicBoxGame (line 137) | class MagicBoxGame(bs.TeamGameActivity):
method getName (line 145) | def getName(cls):
method getDescription (line 149) | def getDescription(cls, sessionType):
method getScoreInfo (line 153) | def getScoreInfo(cls):
method supportsSessionType (line 157) | def supportsSessionType(cls, sessionType):
method getSupportedMaps (line 162) | def getSupportedMaps(cls, sessionType):
method getSettings (line 166) | def getSettings(cls, sessionType):
method __init__ (line 172) | def __init__(self, settings):
method getInstanceDescription (line 188) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 191) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 194) | def onTransitionIn(self):
method onTeamJoin (line 197) | def onTeamJoin(self, team):
method onBegin (line 201) | def onBegin(self):
method _tick (line 210) | def _tick(self):
method endGame (line 240) | def endGame(self):
method _updateBoxState (line 246) | def _updateBoxState(self):
method _spawnBox (line 281) | def _spawnBox(self):
method _flashBoxSpawn (line 294) | def _flashBoxSpawn(self):
method _updateScoreBoard (line 301) | def _updateScoreBoard(self):
method handleMessage (line 305) | def handleMessage(self, m):
FILE: mods/modManager.py
function uuid4 (line 31) | def uuid4():
function _prepare_reload (line 46) | def _prepare_reload():
function bsGetAPIVersion (line 54) | def bsGetAPIVersion():
function index_url (line 68) | def index_url(branch=None):
function mod_url (line 78) | def mod_url(data):
function try_fetch_cb (line 91) | def try_fetch_cb(generator, callback, **kwargs):
function get_cached (line 111) | def get_cached(url, callback, force_fresh=False, fallback_to_outdated=Tr...
function get_index (line 137) | def get_index(callback, branch=None, **kwargs):
function fetch_stats (line 141) | def fetch_stats(callback, **kwargs):
function stats_cached (line 147) | def stats_cached():
function submit_mod_rating (line 154) | def submit_mod_rating(mod, rating, callback):
function submit_download (line 174) | def submit_download(mod):
function fetch_mod (line 191) | def fetch_mod(data, callback):
function process_server_data (line 206) | def process_server_data(data):
function _cb_checkUpdateData (line 215) | def _cb_checkUpdateData(self, data, status_code):
function newMainInit (line 241) | def newMainInit(self, transition='inRight'):
function _doModManager (line 254) | def _doModManager(swinstance):
class ModManager_ServerCallThread (line 266) | class ModManager_ServerCallThread(threading.Thread):
method __init__ (line 268) | def __init__(self, request, requestType, data, callback, eval_data=True):
method _runCallback (line 282) | def _runCallback(self, *args):
method run (line 293) | def run(self):
function mm_serverGet (line 324) | def mm_serverGet(request, data, callback=None, eval_data=True):
function mm_serverPost (line 328) | def mm_serverPost(request, data, callback=None, eval_data=True):
class ModManagerWindow (line 332) | class ModManagerWindow(Window):
method __init__ (line 342) | def __init__(self, transition='inRight', modal=False, showTab="all", o...
method _refresh (line 492) | def _refresh(self, refreshTabs=True):
method _refreshTabs (line 542) | def _refreshTabs(self):
method _cb_select_tab (line 576) | def _cb_select_tab(self, index, refresh=True):
method _cb_select (line 589) | def _cb_select(self, index, mod):
method _cb_refresh (line 593) | def _cb_refresh(self, force_fresh=False):
method _cb_serverdata (line 615) | def _cb_serverdata(self, data, status_code, force_fresh=False):
method _cb_stats (line 636) | def _cb_stats(self, data, status_code):
method _showFetchingIndicator (line 653) | def _showFetchingIndicator(self):
method _cb_info (line 657) | def _cb_info(self, withSound=False):
method _cb_settings (line 662) | def _cb_settings(self):
method _cb_sorting (line 665) | def _cb_sorting(self):
method _back (line 674) | def _back(self):
class UpdateModWindow (line 682) | class UpdateModWindow(Window):
method __init__ (line 684) | def __init__(self, mod, onok, swish=True, back=False):
method ok (line 700) | def ok(self):
class DeleteModWindow (line 704) | class DeleteModWindow(Window):
method __init__ (line 706) | def __init__(self, mod, onok, swish=True, back=False):
method ok (line 715) | def ok(self):
class RateModWindow (line 720) | class RateModWindow(Window):
method __init__ (line 724) | def __init__(self, mod, onok, swish=True, back=False):
method _select (line 780) | def _select(self, index):
method _cancel (line 783) | def _cancel(self):
method _ok (line 786) | def _ok(self):
class QuitToApplyWindow (line 793) | class QuitToApplyWindow(Window):
method __init__ (line 795) | def __init__(self):
method _doFadeAndQuit (line 806) | def _doFadeAndQuit(self):
class ModInfoWindow (line 816) | class ModInfoWindow(Window):
method __init__ (line 817) | def __init__(self, mod, modManagerWindow, originWidget=None):
method _ok (line 997) | def _ok(self):
method _delete (line 1000) | def _delete(self):
method _download (line 1004) | def _download(self):
method _rate (line 1008) | def _rate(self):
class SettingsWindow (line 1020) | class SettingsWindow(Window):
method __init__ (line 1021) | def __init__(self, mod, modManagerWindow, originWidget=None):
method _ok (line 1091) | def _ok(self):
method setBranch (line 1096) | def setBranch(self):
method setCheckUpdate (line 1116) | def setCheckUpdate(self, val):
method checkAutoUpdateState (line 1121) | def checkAutoUpdateState(self):
method setAutoUpdate (line 1134) | def setAutoUpdate(self, val):
method setDownloadStats (line 1143) | def setDownloadStats(self, val):
class Mod (line 1148) | class Mod:
method __init__ (line 1167) | def __init__(self, d):
method writeData (line 1191) | def writeData(self, callback, doQuitWindow, data, status_code):
method install (line 1209) | def install(self, callback, doQuitWindow=True):
method ownData (line 1229) | def ownData(self):
method delete (line 1235) | def delete(self, cb=None):
method checkUpdate (line 1243) | def checkUpdate(self):
method up_to_date (line 1250) | def up_to_date(self):
method is_installed (line 1253) | def is_installed(self):
method local_md5 (line 1256) | def local_md5(self):
method is_outdated (line 1259) | def is_outdated(self):
class LocalMod (line 1269) | class LocalMod(Mod):
method __init__ (line 1272) | def __init__(self, filename):
method checkUpdate (line 1279) | def checkUpdate(self):
method is_installed (line 1282) | def is_installed(self):
method up_to_date (line 1285) | def up_to_date(self):
method getData (line 1288) | def getData(self):
method writeData (line 1291) | def writeData(self, data=None):
function _setTab (line 1298) | def _setTab(self, tab):
function _onGetMoreGamesPress (line 1313) | def _onGetMoreGamesPress(self):
FILE: mods/puckDeathmatch.py
class PuckTouchedMessage (line 7) | class PuckTouchedMessage(object):
class Puck (line 10) | class Puck(bsHockey.Puck):
method __init__ (line 11) | def __init__(self, position, team):
method _tick (line 26) | def _tick(self):
method handleMessage (line 45) | def handleMessage(self, m):
function bsGetAPIVersion (line 78) | def bsGetAPIVersion():
function bsGetGames (line 81) | def bsGetGames():
class PuckDeathMatch (line 85) | class PuckDeathMatch(bs.TeamGameActivity):
method getName (line 88) | def getName(cls):
method getScoreInfo (line 92) | def getScoreInfo(cls):
method getDescription (line 98) | def getDescription(cls, sessionType):
method getSupportedMaps (line 102) | def getSupportedMaps(cls, sessionType):
method supportsSessionType (line 106) | def supportsSessionType(cls, sessionType):
method getSettings (line 111) | def getSettings(cls, sessionType):
method __init__ (line 116) | def __init__(self, settings):
method onTransitionIn (line 162) | def onTransitionIn(self):
method onBegin (line 166) | def onBegin(self):
method onPlayerJoin (line 178) | def onPlayerJoin(self, player):
method onTeamJoin (line 183) | def onTeamJoin(self, team):
method spawnPlayer (line 188) | def spawnPlayer(self, player):
method _flashPuckSpawn (line 200) | def _flashPuckSpawn(self, pos):
method _spawnPuck (line 208) | def _spawnPuck(self, team):
method _handlePuckPlayerCollide (line 225) | def _handlePuckPlayerCollide(self):
method _checkIfWon (line 237) | def _checkIfWon(self):
method _updateScoreBoard (line 244) | def _updateScoreBoard(self):
method handleMessage (line 252) | def handleMessage(self, m):
method endGame (line 264) | def endGame(self):
FILE: mods/quickGameButton.py
function _prepare_reload (line 14) | def _prepare_reload():
function startGame (line 29) | def startGame(session, fadeout=True):
class SimplePlaylist (line 48) | class SimplePlaylist(object):
method __init__ (line 49) | def __init__(self, settings, gameType):
method pullNext (line 53) | def pullNext(self):
class CustomSession (line 61) | class CustomSession(bsTeamGame.FreeForAllSession):
method __init__ (line 62) | def __init__(self, *args, **kwargs):
class SelectGameWindow (line 95) | class SelectGameWindow(AddGameWindow):
method __init__ (line 96) | def __init__(self, transition='inRight'):
method _refresh (line 156) | def _refresh(self, selectGetMoreGamesButton=False, selected=None):
method _add (line 189) | def _add(self):
method onEditGameDone (line 200) | def onEditGameDone(self, config):
method _back (line 209) | def _back(self):
function newInit (line 217) | def newInit(self, *args, **kwargs):
function states (line 239) | def states(self):
function _save_state (line 249) | def _save_state(self):
function _restore_state (line 258) | def _restore_state(self):
FILE: mods/settings_patcher.py
class SettingsButton (line 11) | class SettingsButton:
method __init__ (line 12) | def __init__(self, id, text=None, icon=None, iconColor=None, sorting_p...
method setText (line 23) | def setText(self, text):
method setCallback (line 27) | def setCallback(self, cb):
method add (line 31) | def add(self):
method remove (line 35) | def remove(self):
method setLocals (line 39) | def setLocals(self, swinstance=None, **kwargs):
method x (line 46) | def x(self, swinstance, index, bw, wmodsmallui=0.4, wmod=0.2):
method _create_icon_button (line 58) | def _create_icon_button(self, swinstance, index):
method _create_text_button (line 98) | def _create_text_button(self, swinstance, index, start_y):
function newInit (line 183) | def newInit(self, transition='inRight', originWidget=None):
function statedict (line 243) | def statedict(self):
function _saveState (line 249) | def _saveState(self):
function _restoreState (line 259) | def _restoreState(self):
FILE: mods/smash.py
class Icon (line 7) | class Icon(bsElimination.Icon):
method updateForLives (line 8) | def updateForLives(self):
class PowBox (line 26) | class PowBox(bsBomb.Bomb):
method __init__ (line 27) | def __init__(self, position=(0, 1, 0), velocity=(0, 0, 0)):
method setPowText (line 34) | def setPowText(self, color=(1, 1, 0.4)):
method handleMessage (line 49) | def handleMessage(self, m):
method pow (line 57) | def pow(self):
class PlayerSpaz_Smash (line 61) | class PlayerSpaz_Smash(bs.PlayerSpaz):
method handleMessage (line 70) | def handleMessage(self, m):
method oob_effect (line 276) | def oob_effect(self):
function bsGetAPIVersion (line 292) | def bsGetAPIVersion():
function bsGetGames (line 295) | def bsGetGames():
class SuperSmash (line 298) | class SuperSmash(bs.TeamGameActivity):
method getName (line 301) | def getName(cls):
method getScoreInfo (line 305) | def getScoreInfo(cls):
method getDescription (line 323) | def getDescription(cls, sessionType):
method getInstanceDescription (line 327) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 330) | def getInstanceScoreBoardDescription(self):
method supportsSessionType (line 341) | def supportsSessionType(cls, sessionType):
method getSupportedMaps (line 346) | def getSupportedMaps(cls, sessionType):
method getSettings (line 354) | def getSettings(cls, sessionType):
method __init__ (line 360) | def __init__(self, settings):
method onTransitionIn (line 378) | def onTransitionIn(self):
method onBegin (line 382) | def onBegin(self):
method _dropPowBox (line 390) | def _dropPowBox(self):
method onPlayerJoin (line 399) | def onPlayerJoin(self, player):
method onPlayerLeave (line 411) | def onPlayerLeave(self, player):
method _updateIcons (line 422) | def _updateIcons(self):
method spawnPlayer (line 459) | def spawnPlayer(self, player):
method handleMessage (line 525) | def handleMessage(self, m):
method endGame (line 563) | def endGame(self):
method _getLivingTeams (line 620) | def _getLivingTeams(self):
FILE: mods/snake.py
function bsGetAPIVersion (line 4) | def bsGetAPIVersion():
function bsGetGames (line 7) | def bsGetGames():
class RaceTimer (line 11) | class RaceTimer:
method __init__ (line 13) | def __init__(self, incTime=1000):
method start (line 44) | def start(self):
method _doLight1 (line 47) | def _doLight1(self):
method _doLight2 (line 51) | def _doLight2(self):
method _doLight3 (line 55) | def _doLight3(self):
method _doLight4 (line 59) | def _doLight4(self):
method onFinish (line 69) | def onFinish(self):
method onIncrement (line 72) | def onIncrement(self):
method increment (line 75) | def increment(self):
class SnakeGame (line 81) | class SnakeGame(bs.TeamGameActivity):
method getName (line 87) | def getName(cls):
method getScoreInfo (line 91) | def getScoreInfo(cls):
method getDescription (line 95) | def getDescription(cls, sessionType):
method supportsSessionType (line 99) | def supportsSessionType(cls, sessionType):
method getSupportedMaps (line 104) | def getSupportedMaps(cls, sessionType):
method getSettings (line 108) | def getSettings(cls, sessionType):
method __init__ (line 112) | def __init__(self, settings):
method getInstanceDescription (line 132) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 136) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 139) | def onTransitionIn(self):
method onTeamJoin (line 142) | def onTeamJoin(self, team):
method onPlayerJoin (line 147) | def onPlayerJoin(self, player):
method onPlayerLeave (line 154) | def onPlayerLeave(self, player):
method onBegin (line 157) | def onBegin(self):
method doRaceTimer (line 168) | def doRaceTimer(self):
method timerCallback (line 173) | def timerCallback(self):
method _spawnMine (line 180) | def _spawnMine(self, player):
method _removeMine (line 213) | def _removeMine(self, player, mine):
method endGame (line 222) | def endGame(self):
method handleMessage (line 229) | def handleMessage(self, m):
method _updateScoreBoard (line 238) | def _updateScoreBoard(self):
FILE: mods/snowyPowerup.py
class NewPowerupFactory (line 14) | class NewPowerupFactory(PowerupFactory):
method __init__ (line 15) | def __init__(self):
method getRandomPowerupType (line 69) | def getRandomPowerupType(self, forceType=None, excludeTypes=None):
function getDefaultPowerupDistribution (line 80) | def getDefaultPowerupDistribution():
class NewPowerup (line 94) | class NewPowerup(Powerup):
method __init__ (line 95) | def __init__(self,position=(0,1,0),powerupType='tripleBombs',expire=Tr...
method delpor (line 150) | def delpor(self):
method handleMessage (line 154) | def handleMessage(self,m):
FILE: mods/surviveCurse.py
function bsGetAPIVersion (line 6) | def bsGetAPIVersion():
function bsGetGames (line 10) | def bsGetGames():
class Icon (line 14) | class Icon(bs.Actor):
method __init__ (line 16) | def __init__(self,player,position,scale,showLives=True,showDeath=True,
method setPositionAndScale (line 64) | def setPositionAndScale(self,position,scale):
method updateForLives (line 73) | def updateForLives(self):
method handlePlayerSpawned (line 85) | def handlePlayerSpawned(self):
method handlePlayerDied (line 90) | def handlePlayerDied(self):
class PlayerSpaz_Curse (line 98) | class PlayerSpaz_Curse(bs.PlayerSpaz):
method onJumpPress (line 101) | def onJumpPress(self):
method handleMessage (line 110) | def handleMessage(self,m):
method reCurse (line 302) | def reCurse(self):
method curse (line 306) | def curse(self):
method curseExplodeIfNotReset (line 330) | def curseExplodeIfNotReset(self):
method curseExplodeNoShrapnel (line 334) | def curseExplodeNoShrapnel(self,sourcePlayer=None):
class SurviveCurseGame (line 358) | class SurviveCurseGame(bs.TeamGameActivity):
method getName (line 361) | def getName(cls):
method getScoreInfo (line 365) | def getScoreInfo(cls):
method getDescription (line 371) | def getDescription(cls,sessionType):
method supportsSessionType (line 375) | def supportsSessionType(cls,sessionType):
method getSupportedMaps (line 380) | def getSupportedMaps(cls,sessionType):
method getSettings (line 384) | def getSettings(cls,sessionType):
method __init__ (line 400) | def __init__(self,settings):
method getInstanceDescription (line 411) | def getInstanceDescription(self):
method getInstanceScoreBoardDescription (line 414) | def getInstanceScoreBoardDescription(self):
method onTransitionIn (line 417) | def onTransitionIn(self):
method onTeamJoin (line 421) | def onTeamJoin(self,team):
method onPlayerJoin (line 425) | def onPlayerJoin(self, player):
method _updateSoloMode (line 454) | def _updateSoloMode(self):
method _updateIcons (line 465) | def _updateIcons(self):
method _getSpawnPoint (line 526) | def _getSpawnPoint(self,player):
method spawnPlayer (line 552) | def spawnPlayer(self,player):
method spawnPlayerSpaz (line 561) | def spawnPlayerSpaz(self,player,position=(0,0,0),angle=None):
method _printLives (line 605) | def _printLives(self,player):
method onPlayerLeave (line 614) | def onPlayerLeave(self,player):
method onBegin (line 629) | def onBegin(self):
method _getTotalTeamLives (line 681) | def _getTotalTeamLives(self,team):
method handleMessage (line 686) | def handleMessage(self,m):
method boxSpawn (line 721) | def boxSpawn(self):
method getRandomPowerupPoint (line 742) | def getRandomPowerupPoint(self):
method _update (line 783) | def _update(self):
method _getLivingTeams (line 805) | def _getLivingTeams(self):
method endGame (line 808) | def endGame(self):
FILE: mods/ui_wrappers.py
class Widget (line 6) | class Widget(bs.Widget):
method __init__ (line 16) | def __init__(self, **kwargs):
method _call_func (line 30) | def _call_func(self, func, kwargs):
method set (line 40) | def set(self, **kwargs):
method reset_value (line 44) | def reset_value(self, key):
method activate (line 47) | def activate(self, *args, **kwargs):
method delete (line 50) | def delete(self, *args, **kwargs):
method exists (line 53) | def exists(self, *args, **kwargs):
method getChildren (line 56) | def getChildren(self, *args, **kwargs):
method getScreenSpaceCenter (line 59) | def getScreenSpaceCenter(self, *args, **kwargs):
method getSelectedChild (line 62) | def getSelectedChild(self, *args, **kwargs):
method getWidgetType (line 65) | def getWidgetType(self, *args, **kwargs):
method __getattr__ (line 68) | def __getattr__(self, key):
method __setattr__ (line 75) | def __setattr__(self, key, value):
method __repr__ (line 85) | def __repr__(self):
method __str__ (line 88) | def __str__(self):
class TextWidget (line 92) | class TextWidget(Widget):
method text (line 104) | def text(self):
class ButtonWidget (line 108) | class ButtonWidget(Widget):
class CheckBoxWidget (line 122) | class CheckBoxWidget(Widget):
method __init__ (line 130) | def __init__(self, **kwargs):
method _call_func (line 138) | def _call_func(self, func, kwargs):
class ContainerWidget (line 154) | class ContainerWidget(Widget):
method doTransition (line 165) | def doTransition(self, transition):
class ScrollWidget (line 169) | class ScrollWidget(Widget):
class ColumnWidget (line 177) | class ColumnWidget(Widget):
class HScrollWidget (line 186) | class HScrollWidget(Widget):
class ImageWidget (line 194) | class ImageWidget(Widget):
class RowWidget (line 204) | class RowWidget(Widget):
FILE: server/src/main.rs
type RatingSubmission (line 26) | struct RatingSubmission {
type DownloadSubmission (line 33) | struct DownloadSubmission {
type Rating (line 39) | enum Rating {
method from (line 48) | fn from(rating: usize) -> Self {
method decode (line 60) | fn decode<D: Decoder>(d: &mut D) -> Result<Rating, D::Error> {
method encode (line 67) | fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
type StatsResults (line 74) | struct StatsResults {
function incr_requests (line 81) | fn incr_requests(conn: &Connection) {
function get_mod_rating (line 87) | fn get_mod_rating(conn: &Connection, mod_str: &str) -> Result<(Rating, u...
function get_mod_downloads (line 100) | fn get_mod_downloads(conn: &Connection, mod_str: &str) -> Result<usize, ...
constant OK_RESP (line 106) | const OK_RESP: (StatusCode, &'static str) = (StatusCode::Ok, "ok");
function main (line 108) | fn main() {
FILE: server/src/redis_middleware.rs
type RedisMiddleware (line 11) | pub struct RedisMiddleware {
method new (line 16) | pub fn new(connect_str: &str,
method invoke (line 38) | fn invoke<'mw, 'conn>(&self,
type Value (line 34) | type Value = Arc<Pool<RedisConnectionManager>>;
type RedisRequestExtensions (line 47) | pub trait RedisRequestExtensions {
method redis_conn (line 48) | fn redis_conn(&self) -> PooledConnection<RedisConnectionManager>;
method redis_conn (line 52) | fn redis_conn(&self) -> PooledConnection<RedisConnectionManager> {
FILE: update_index.py
function normalize_path (line 9) | def normalize_path(p):
function add (line 106) | def add(text, mod, spacer, *args):
FILE: utils/blender/bob_plugin.py
function to_bmesh (line 58) | def to_bmesh(mesh, save=False):
function clamp (line 71) | def clamp(val, minimum=0, maximum=1):
class ImportBOB (line 77) | class ImportBOB(bpy.types.Operator, ImportHelper):
method execute (line 87) | def execute(self, context):
class ExportBOB (line 103) | class ExportBOB(bpy.types.Operator, ExportHelper):
method execute (line 120) | def execute(self, context):
function import_bob_menu (line 125) | def import_bob_menu(self, context):
function export_bob_menu (line 129) | def export_bob_menu(self, context):
class ImportCOB (line 133) | class ImportCOB(bpy.types.Operator, ImportHelper):
method execute (line 143) | def execute(self, context):
class ExportCOB (line 160) | class ExportCOB(bpy.types.Operator, ExportHelper):
method execute (line 177) | def execute(self, context):
function import_cob_menu (line 182) | def import_cob_menu(self, context):
function export_cob_menu (line 186) | def export_cob_menu(self, context):
function import_leveldefs (line 190) | def import_leveldefs(self, context):
function export_leveldefs (line 194) | def export_leveldefs(self, context):
function register (line 198) | def register():
function unregister (line 208) | def unregister():
function load (line 218) | def load(operator, context, filepath):
class Verts (line 298) | class Verts:
method __init__ (line 299) | def __init__(self):
method get (line 303) | def get(self, coords, normal, blender_index, uv=None):
method __len__ (line 313) | def __len__(self):
method __iter__ (line 316) | def __iter__(self):
function vec_similar (line 320) | def vec_similar(v1, v2):
class Vert (line 324) | class Vert:
method __init__ (line 325) | def __init__(self, coords, normal, uv):
method similar (line 330) | def similar(self, other):
function save (line 338) | def save(operator, context, filepath, triangulate, check_existing):
function loadcob (line 402) | def loadcob(operator, context, filepath):
function savecob (line 439) | def savecob(operator, context, filepath, triangulate, check_existing):
function flpV (line 476) | def flpV(vector):
class ImportLevelDefs (line 482) | class ImportLevelDefs(bpy.types.Operator, ImportHelper):
method execute (line 492) | def execute(self, context):
class ExportLevelDefs (line 551) | class ExportLevelDefs(bpy.types.Operator, ImportHelper):
method execute (line 561) | def execute(self, context):
FILE: utils/inject_mod.py
function inject (line 10) | def inject(host, file):
FILE: utils/installer.py
function index_url (line 19) | def index_url():
function mod_url (line 27) | def mod_url(data):
function try_fetch_cb (line 40) | def try_fetch_cb(generator, callback):
class SimpleGetThread (line 52) | class SimpleGetThread(threading.Thread):
method __init__ (line 53) | def __init__(self, url, callback=None):
method _runCallback (line 62) | def _runCallback(self, arg):
method run (line 71) | def run(self):
function check_finished (line 85) | def check_finished():
function install (line 98) | def install(data, mod):
function onIndex (line 118) | def onIndex(data):
Condensed preview — 100 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (801K chars).
[
{
"path": ".gitignore",
"chars": 113,
"preview": "\n1.3.8\naudioCache\nreplays\n.idea\n.bsac\n.bsac2\n.bsuuid\n\n*.py.bak\n*.pyc\n\nconfig.json\nconfig.json.prev\n\nnode_modules\n"
},
{
"path": "LICENSE",
"chars": 1210,
"preview": "This is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, c"
},
{
"path": "README.md",
"chars": 5489,
"preview": "<h2>\nNote: This repository is not maintained and is not compatible with current BombSquad versions (>v1.5).\nSee https://"
},
{
"path": "index.json",
"chars": 43171,
"preview": "{\n \"mods\": {\n \"AroundTheWorld\": {\n \"changelog\": [\n \"Create AroundTheWorld.pyThis mod"
},
{
"path": "mods/AroundTheWorld.py",
"chars": 13624,
"preview": "import bs\nimport random\nimport bsUtils\n\ndef bsGetAPIVersion():\n # see bombsquadgame.com/apichanges\n return 4\n\ndef "
},
{
"path": "mods/BackToYou.json",
"chars": 81,
"preview": "{\n \"name\": \"Back To You\",\n \"author\": \"joshville79\",\n \"category\": \"minigames\"\n}"
},
{
"path": "mods/BackToYou.py",
"chars": 25208,
"preview": "import bs\nimport random\nimport bsUtils\n#import PlayerSpaz\n\ndef bsGetAPIVersion():\n # see bombsquadgame.com/apichanges"
},
{
"path": "mods/Basketball.json",
"chars": 80,
"preview": "{\n \"name\": \"Basketball\",\n \"author\": \"MattZ45986\",\n \"category\": \"minigames\"\n}\n"
},
{
"path": "mods/Basketball.py",
"chars": 19339,
"preview": "#Basketball\r\nimport bs\r\nimport bsUtils\r\nimport math\r\nimport random\r\n\r\n# This game is played with the same rules as the c"
},
{
"path": "mods/BuddyBunny.json",
"chars": 89,
"preview": "{\n \"name\": \"Buddy Bunny powerup\",\n \"author\": \"joshville79\",\n \"category\": \"libraries\"\n}"
},
{
"path": "mods/BuddyBunny.py",
"chars": 6078,
"preview": "import bsSpaz\nimport bs\nimport bsUtils\nimport weakref\nimport random\n\nclass BunnyBuddyBot(bsSpaz.SpazBot):\n \"\"\"\n ca"
},
{
"path": "mods/Collector.json",
"chars": 79,
"preview": "{\n \"name\": \"Collector\",\n \"author\": \"TheMikirog\",\n \"category\": \"minigames\"\n}\n"
},
{
"path": "mods/Collector.py",
"chars": 20847,
"preview": "import bs\nimport random\nimport bsUtils\nimport weakref\n\n'''\n Gamemode: Collector\n Creator: TheMikirog\n Website: "
},
{
"path": "mods/FillErUp.json",
"chars": 81,
"preview": "{\n \"name\": \"Fill 'Er Up\",\n \"author\": \"joshville79\",\n \"category\": \"minigames\"\n}"
},
{
"path": "mods/FillErUp.py",
"chars": 19812,
"preview": "import bs\nimport bsSpaz\nimport random\nimport bsUtils\nimport bsPowerup\n\ndef bsGetAPIVersion():\n # see bombsquadgame.co"
},
{
"path": "mods/FlagDay.py",
"chars": 17138,
"preview": "#FlagDay\nimport bs\nimport random\nimport bsUtils\nimport math\n\n# http://www.froemling.net/docs/bombsquad-python-api\n#if yo"
},
{
"path": "mods/GravityFalls.py",
"chars": 22264,
"preview": "import bs\nimport bsUtils\nimport random\n\ndef bsGetAPIVersion():\n return 4\n\ndef bsGetGames():\n return [GravityFalls]"
},
{
"path": "mods/Greed.json",
"chars": 75,
"preview": "{\n \"name\": \"Greed\",\n \"author\": \"joshville79\",\n \"category\": \"minigames\"\n}"
},
{
"path": "mods/Greed.py",
"chars": 33984,
"preview": "import bs\nimport random\nimport bsUtils\nimport bsPowerup\nfrom bsSpaz import PlayerSpazHurtMessage\n\ndef bsGetAPIVersion():"
},
{
"path": "mods/GuessTheBomb.json",
"chars": 86,
"preview": "{\n \"name\": \"Guess The Bomb\",\n \"author\": \"Paolo Valerdi\",\n \"category\": \"minigames\"\n}"
},
{
"path": "mods/GuessTheBomb.py",
"chars": 5362,
"preview": "#Made by Paolo Valerdi\nimport bs\nimport random\n\ndef bsGetAPIVersion():\n return 4\n\ndef bsGetGames():\n return [Guess"
},
{
"path": "mods/HazardousCargo.json",
"chars": 85,
"preview": "{\n \"name\": \"Hazardous Cargo\",\n \"author\": \"joshville79\",\n \"category\": \"minigames\"\n}"
},
{
"path": "mods/HazardousCargo.py",
"chars": 13208,
"preview": "import bs\nimport random\nimport bsUtils\nimport bsBomb\n\ndef bsGetAPIVersion():\n # see bombsquadgame.com/apichanges\n "
},
{
"path": "mods/Infection.json",
"chars": 79,
"preview": "{\n \"name\": \"Infection\",\n \"author\": \"joshville79\",\n \"category\": \"minigames\"\n}"
},
{
"path": "mods/Infection.py",
"chars": 15898,
"preview": "import bs\nimport random\nimport bsUtils\nimport bsBomb\nimport bsVector\n\ndef bsGetAPIVersion():\n # see bombsquadgame.com"
},
{
"path": "mods/JumpingContest.py",
"chars": 7631,
"preview": "# Jumping Contest\n\n# This simple game tests each player's ability in an underappreciated aspect of the game: jumping.\nim"
},
{
"path": "mods/LandGrab.json",
"chars": 79,
"preview": "{\n \"name\": \"Land Grab\",\n \"author\": \"joshville79\",\n \"category\": \"minigames\"\n}"
},
{
"path": "mods/LandGrab.py",
"chars": 35241,
"preview": "import bs\nimport random\nimport math\nimport bsUtils\nimport bsBomb\nimport bsVector\nimport bsSpaz\n\ndef bsGetAPIVersion():\n "
},
{
"path": "mods/Paint.py",
"chars": 6252,
"preview": "#Canvas\n\nimport bs\nimport random\n\ndef bsGetAPIVersion():\n return 4\n\ndef bsGetGames():\n return [Paint]\n\ndef bsGetLe"
},
{
"path": "mods/Portal.json",
"chars": 82,
"preview": "{\n \"name\": \"Portal powerup\",\n \"author\": \"The Great\",\n \"category\": \"libraries\"\n}"
},
{
"path": "mods/Portal.py",
"chars": 5912,
"preview": "import bs\nimport random\nimport bsUtils\nimport copy\nimport types\n\n# Following are necessary variables for portal\nmaxporta"
},
{
"path": "mods/Protection.json",
"chars": 80,
"preview": "{\n \"name\": \"Protection\",\n \"author\": \"joshville79\",\n \"category\": \"minigames\"\n}"
},
{
"path": "mods/Protection.py",
"chars": 25217,
"preview": "import bs\nimport random\nimport bsUtils\n\ndef bsGetAPIVersion():\n # see bombsquadgame.com/apichanges\n return 4\n\ndef "
},
{
"path": "mods/SharksAndMinnows.py",
"chars": 9706,
"preview": "#SharksAndMinnows\n\nimport bs\nimport bsUtils\nimport random\n\ndef bsGetAPIVersion():\n return 4\n\ndef bsGetGames():\n re"
},
{
"path": "mods/Siege.py",
"chars": 5324,
"preview": "#Siege\nimport bs\nimport bsUtils\nimport random\n\ndef bsGetAPIVersion():\n return 4\n\ndef bsGetGames():\n return [Siege]"
},
{
"path": "mods/SimonSays.py",
"chars": 8852,
"preview": "#SimonSays\n# you had really better do what Simon says...\nimport bs\nimport random\n\ndef bsGetAPIVersion():\n return 4\n\nd"
},
{
"path": "mods/SnoBallz.json",
"chars": 86,
"preview": "{\n \"name\": \"SnoBallz powerup\",\n \"author\": \"joshville79\",\n \"category\": \"libraries\"\n}"
},
{
"path": "mods/SnoBallz.py",
"chars": 12484,
"preview": "#This is not a minigame mod script. It's a powerup.\nimport bs\nimport bsUtils\nimport bsVector\nimport bsBomb\nfrom math im"
},
{
"path": "mods/SnowBallFight.json",
"chars": 135,
"preview": "{\n \"name\": \"Snowball Fight (requires SnoBallz.py)\",\n \"author\": \"joshville79\",\n \"category\": \"minigames\",\n \"requires\":"
},
{
"path": "mods/SnowBallFight.py",
"chars": 8871,
"preview": "import bs\nimport bsVector\nimport bsSpaz\nimport bsBomb\nimport bsUtils\nimport random\nimport SnoBallz\n\n#please note that th"
},
{
"path": "mods/WizardWar.json",
"chars": 80,
"preview": "{\n \"name\": \"WizardWar\",\n \"author\": \"MattZ45986\",\n \"category\": \"minigames\" \n}\n"
},
{
"path": "mods/WizardWar.py",
"chars": 11918,
"preview": "# Wizard War\n# In light of the new \"Grumbledorf\" character\n# I have made a war just for him.\nimport bs\nimport random\nimp"
},
{
"path": "mods/ZombieHorde.json",
"chars": 82,
"preview": "{\n \"name\": \"Zombie Horde\",\n \"author\": \"joshville79\",\n \"category\": \"minigames\"\n}"
},
{
"path": "mods/ZombieHorde.py",
"chars": 40616,
"preview": "import bs\nimport random\nimport bsUtils\nimport bsSpaz\nimport copy\n#import PlayerSpaz\n\ndef bsGetAPIVersion():\n # see bo"
},
{
"path": "mods/airStrike.json",
"chars": 75,
"preview": "{\n \"name\": \"Air Strike\",\n \"author\": \"SoKpl\",\n \"category\": \"minigames\"\n}\n"
},
{
"path": "mods/airStrike.py",
"chars": 4976,
"preview": "import bs\nimport random\n\ndef bsGetAPIVersion():\n\treturn 4\n\ndef bsGetGames():\n\treturn [AirStrikeGame]\n\ndef bsGetLevels():"
},
{
"path": "mods/arms_race.json",
"chars": 79,
"preview": "{\n \"name\": \"Arms Race\",\n \"author\": \"Mrmaxmeier\",\n \"category\": \"minigames\"\n}\n"
},
{
"path": "mods/arms_race.py",
"chars": 4443,
"preview": "import bs\nimport bsUtils\nimport random\n\n\nclass State:\n\tdef __init__(self, bomb=None, grab=False, punch=False, curse=Fals"
},
{
"path": "mods/auto_reloader.json",
"chars": 116,
"preview": "{\n \"name\": \"Auto Reloader\",\n \"author\": \"Mrmaxmeier\",\n \"category\": \"utilities\",\n \"supports\": [\"config_editor\"]\n}\n"
},
{
"path": "mods/auto_reloader.py",
"chars": 4987,
"preview": "import bs\nimport os\nimport os.path\nfrom md5 import md5\nimport weakref\nimport imp\nimport sys\n\ndefault = {\n\t\"_version\": 1,"
},
{
"path": "mods/bomb_on_my_head.json",
"chars": 85,
"preview": "{\n \"name\": \"Bomb on my Head\",\n \"author\": \"Mrmaxmeier\",\n \"category\": \"minigames\"\n}\n"
},
{
"path": "mods/bomb_on_my_head.py",
"chars": 8346,
"preview": "import random\n\nimport bs\nimport bsUtils\nfrom bsSpaz import _BombDiedMessage\n\nclass PlayerSpazBombOnMyHead(bs.PlayerSpaz)"
},
{
"path": "mods/bomberman.json",
"chars": 104,
"preview": "{\n \"name\": \"Bomberman\",\n \"author\": \"Mrmaxmeier\",\n \"category\": \"minigames\",\n \"tag\": \"experimental\"\n}\n"
},
{
"path": "mods/bomberman.py",
"chars": 17190,
"preview": "import bs\nimport bsUtils\nimport bsElimination\nimport bsBomb\nimport bsSpaz\nimport random\nimport math\n\n\nclass Map:\n\tcenter"
},
{
"path": "mods/boxing.json",
"chars": 76,
"preview": "{\n \"name\": \"Boxing\",\n \"author\": \"TheMikirog\",\n \"category\": \"minigames\"\n}\n"
},
{
"path": "mods/boxing.py",
"chars": 4870,
"preview": "import bs\n\ndef bsGetAPIVersion():\n return 4\n\ndef bsGetGames():\n return [DeathMatchGame]\n\nclass DeathMatchGame(bs.T"
},
{
"path": "mods/brainFreeze.json",
"chars": 82,
"preview": "{\n \"name\": \"Brain Freeze\",\n \"author\": \"TheMikirog\",\n \"category\": \"minigames\"\n}\n"
},
{
"path": "mods/brainFreeze.py",
"chars": 7960,
"preview": "import bs\nimport random\n\ndef bsGetAPIVersion():\n return 4\n\ndef bsGetGames():\n return [BrainFreezeGame]\n\ndef bsGetL"
},
{
"path": "mods/bsBoxingOfTheHill.json",
"chars": 88,
"preview": "{\n \"name\": \"Boxing Of The Hill\",\n \"author\": \"joshville79\",\n \"category\": \"minigames\"\n}"
},
{
"path": "mods/bsBoxingOfTheHill.py",
"chars": 8436,
"preview": "import bs\nimport weakref\n\ndef bsGetAPIVersion():\n # see bombsquadgame.com/apichanges\n return 4\n\ndef bsGetGames():\n"
},
{
"path": "mods/bsKillZone.json",
"chars": 79,
"preview": "{\n \"name\": \"Kill Zone\",\n \"author\": \"joshville79\",\n \"category\": \"minigames\"\n}"
},
{
"path": "mods/bsKillZone.py",
"chars": 12614,
"preview": "import bs\nimport random\nimport math\n\ndef bsGetAPIVersion():\n return 4\n\ndef bsGetGames():\n return [KillZoneGame]\n\nd"
},
{
"path": "mods/catch_to_live.json",
"chars": 75,
"preview": "{\n \"name\": \"CatchToLive\",\n \"author\": \"Deva\",\n \"category\": \"minigames\"\n}\n"
},
{
"path": "mods/catch_to_live.py",
"chars": 14825,
"preview": "# coding=utf-8\n# coding=utf8\nimport bs\nimport bsUtils\nimport random\n\n\nclass CheckNeedNewMadMessage(object):\n def __in"
},
{
"path": "mods/fightOfFaith.json",
"chars": 79,
"preview": "{\n \"name\": \"Fight of Faith\",\n \"author\": \"SoKpl\",\n \"category\": \"minigames\"\n}\n"
},
{
"path": "mods/fightOfFaith.py",
"chars": 5820,
"preview": "import bs\nimport random\n\ndef bsGetAPIVersion():\n # return the api-version this script expects.\n # this prevents it"
},
{
"path": "mods/frozenone.json",
"chars": 84,
"preview": "{\n \"name\": \"The Frozen One\",\n \"author\": \"Mrmaxmeier\",\n \"category\": \"minigames\"\n}\n"
},
{
"path": "mods/frozenone.py",
"chars": 3189,
"preview": "import bs\nfrom bsChosenOne import ChosenOneGame\n\ndef bsGetAPIVersion():\n\treturn 4\n\ndef bsGetGames():\n\treturn [FrozenOneG"
},
{
"path": "mods/iceDeathmatch.json",
"chars": 79,
"preview": "{\n \"name\": \"Ice Deathmatch\",\n \"author\": \"SoKpl\",\n \"category\": \"minigames\"\n}\n"
},
{
"path": "mods/iceDeathmatch.py",
"chars": 5265,
"preview": "import bs\n\n\ndef bsGetAPIVersion():\n return 4\n\n\ndef bsGetGames():\n return [IceDeathMatchGame]\n\n\nclass IceDeathMatch"
},
{
"path": "mods/magic_box.json",
"chars": 79,
"preview": "{\n \"name\": \"Magic Box\",\n \"author\": \"Mrmaxmeier\",\n \"category\": \"minigames\"\n}\n"
},
{
"path": "mods/magic_box.py",
"chars": 9526,
"preview": "import bs\nimport bsUtils\n\nclass MagicBox(bs.Bomb):\n\tdef __init__(self, position=(0, 1, 0), velocity=(0, 0, 0), bombType="
},
{
"path": "mods/modManager.json",
"chars": 146,
"preview": "{\n \"name\": \"Mod Manager (this thingy)\",\n \"author\": \"Mrmaxmeier\",\n \"category\": \"utilities\",\n \"requires\": [\"ui_wrapper"
},
{
"path": "mods/modManager.py",
"chars": 52611,
"preview": "from __future__ import print_function\nimport bs\nimport bsInternal\nimport os\nimport urllib\nimport urllib2\nimport httplib\n"
},
{
"path": "mods/puckDeathmatch.json",
"chars": 85,
"preview": "{\n \"name\": \"Puck Deathmatch\",\n \"author\": \"Mrmaxmeier\",\n \"category\": \"minigames\"\n}\n"
},
{
"path": "mods/puckDeathmatch.py",
"chars": 8834,
"preview": "import bs\nimport bsHockey\n\nimport random\n\n\nclass PuckTouchedMessage(object):\n\tpass\n\nclass Puck(bsHockey.Puck):\n\tdef __in"
},
{
"path": "mods/quickGameButton.json",
"chars": 87,
"preview": "{\n \"name\": \"Quick-Game Button\",\n \"author\": \"Mrmaxmeier\",\n \"category\": \"utilities\"\n}\n"
},
{
"path": "mods/quickGameButton.py",
"chars": 11693,
"preview": "import bs\nimport bsInternal\nimport bsTeamGame\nfrom bsUI import PlayWindow, AddGameWindow, gSmallUI, gMedUI, gTitleColor,"
},
{
"path": "mods/settings_patcher.json",
"chars": 86,
"preview": "{\n \"name\": \"settings_patcher\",\n \"author\": \"Mrmaxmeier\",\n \"category\": \"libraries\"\n}\n"
},
{
"path": "mods/settings_patcher.py",
"chars": 10097,
"preview": "import bs\nfrom bsUI import SettingsWindow, gSmallUI, gMedUI, gTitleColor, gDoAndroidNav, gWindowStates\n\ntry:\n from ui"
},
{
"path": "mods/smash.json",
"chars": 81,
"preview": "{\n \"name\": \"Super Smash\",\n \"author\": \"Mrmaxmeier\",\n \"category\": \"minigames\"\n}\n"
},
{
"path": "mods/smash.py",
"chars": 21298,
"preview": "import random\nimport bs\nimport bsUtils\nimport bsElimination\nimport bsBomb\n\nclass Icon(bsElimination.Icon):\n\tdef updateFo"
},
{
"path": "mods/snake.json",
"chars": 75,
"preview": "{\n \"name\": \"Snake\",\n \"author\": \"Mrmaxmeier\",\n \"category\": \"minigames\"\n}\n"
},
{
"path": "mods/snake.py",
"chars": 7187,
"preview": "import bs\n\n\ndef bsGetAPIVersion():\n\treturn 4\n\ndef bsGetGames():\n\treturn [SnakeGame]\n\n\nclass RaceTimer:\n\t\"\"\"Basicly the o"
},
{
"path": "mods/snowyPowerup.json",
"chars": 143,
"preview": "{\n \"name\": \"Modified bsPowerup.py\",\n \"author\": \"joshville79\",\n \"category\": \"libraries\",\n \"requires\": [\"BuddyBunny\", "
},
{
"path": "mods/snowyPowerup.py",
"chars": 9683,
"preview": "import bs\nimport random\n#add for bunny buddy:\nimport BuddyBunny\nimport SnoBallz\nimport bsPowerup\nimport bsSpaz\nimport Po"
},
{
"path": "mods/surviveCurse.json",
"chars": 88,
"preview": "{\n \"name\": \"Survive the Curse!\",\n \"author\": \"joshville79\",\n \"category\": \"minigames\"\n}"
},
{
"path": "mods/surviveCurse.py",
"chars": 38535,
"preview": "import bs\nimport random\nimport bsUtils\nimport bsPowerup\n\ndef bsGetAPIVersion():\n # see bombsquadgame.com/apichanges\n "
},
{
"path": "mods/ui_wrappers.json",
"chars": 81,
"preview": "{\n \"name\": \"ui_wrappers\",\n \"author\": \"Mrmaxmeier\",\n \"category\": \"libraries\"\n}\n"
},
{
"path": "mods/ui_wrappers.py",
"chars": 8370,
"preview": "import bs\n\nDEBUG = False\n\n\nclass Widget(bs.Widget):\n _instance = None\n _values = dict(upWidget=None, downWidget=No"
},
{
"path": "requirements.txt",
"chars": 16,
"preview": "gitpython>=0.3.5"
},
{
"path": "server/.gitignore",
"chars": 7,
"preview": "target\n"
},
{
"path": "server/Cargo.toml",
"chars": 245,
"preview": "[package]\nauthors = [\"Mrmaxmeier <Mrmaxmeier@gmail.com>\"]\nname = \"server\"\nversion = \"0.1.0\"\n\n[dependencies]\nnickel = \"^0"
},
{
"path": "server/src/main.rs",
"chars": 7342,
"preview": "extern crate rustc_serialize;\n#[macro_use]\nextern crate nickel;\nextern crate redis;\nextern crate r2d2;\nextern crate r2d2"
},
{
"path": "server/src/redis_middleware.rs",
"chars": 1668,
"preview": "\nuse std::sync::Arc;\nuse std::error::Error as StdError;\n\nuse nickel::{Request, Response, Middleware, Continue, Middlewar"
},
{
"path": "update_index.py",
"chars": 4854,
"preview": "import os\nimport os.path\nimport json\nimport hashlib\nimport git\n\nPROTOCOL_VERSION = 1.1\n\ndef normalize_path(p):\n # han"
},
{
"path": "utils/blender/README.md",
"chars": 744,
"preview": "\n1. Download [this file](https://github.com/Mrmaxmeier/BombSquad-Community-Mod-Manager/blob/master/utils/blender/bob_plu"
},
{
"path": "utils/blender/bob_plugin.py",
"chars": 19482,
"preview": "import os\nimport os.path\nimport bpy\nimport bmesh\nimport struct\nfrom mathutils import Vector\nfrom bpy.props import String"
},
{
"path": "utils/inject_mod.py",
"chars": 1909,
"preview": "import telnetlib\nimport click\nimport json\n\n# TODO: support for multiple files\n\n@click.command()\n@click.option('--host', "
},
{
"path": "utils/installer.py",
"chars": 4101,
"preview": "import bs\nimport bsInternal\nimport threading\nimport json\nimport urllib2\nimport weakref\nimport os\nimport os.path\n\nimport "
}
]
About this extraction
This page contains the full source code of the Mrmaxmeier/BombSquad-Community-Mod-Manager GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 100 files (747.4 KB), approximately 185.8k tokens, and a symbol index with 1375 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.