Assets overhaul + demon list + several misc updates
I held back on pushing this since I wanted to wait for Rob to unblock level downloading, but it's probably gonna be a while since it's (likely) related to an unlisted level exploit Anyways I totally overhauled how the assets work, and you can also browse through all the files by going to gdbrowser.com/assets, because why not I also made many other changes and fixes during this timespan including the addition of the demon list, optimized custom lists along with a ?page param, and other random stuff that needed touching up - Removed Herobrine
32
README.md
|
@ -9,12 +9,10 @@ I mean, sure. Why not.
|
||||||
|
|
||||||
Just make sure to give credit, obviously. Via the bottom of the homepage, the credits button, or maybe even both if you're feeling extra nice.
|
Just make sure to give credit, obviously. Via the bottom of the homepage, the credits button, or maybe even both if you're feeling extra nice.
|
||||||
|
|
||||||
Obviously, GDBrowser isn't perfect when it comes to GD private servers, since both requests and responses might be a bit different. Or a LOT, as I learned.
|
Obviously, GDBrowser isn't perfect when it comes to GD private servers, since both requests and responses might be a bit different. Or a LOT, as I learned. (seriously what's with that?)
|
||||||
|
|
||||||
You can also check out `settings.js` to tweak some additional settings (mainly GDPS related) such as whether to cache things or if timestamps should end with "ago"
|
You can also check out `settings.js` to tweak some additional settings (mainly GDPS related) such as whether to cache things or if timestamps should end with "ago"
|
||||||
|
|
||||||
GDPS compatibility is still a HUGE work in progress, so pull requests would be greatly appreciated if you manage to make any improvements!
|
|
||||||
|
|
||||||
# Folders
|
# Folders
|
||||||
|
|
||||||
GDBrowser has a lot of folders. I like to keep things neat.
|
GDBrowser has a lot of folders. I like to keep things neat.
|
||||||
|
@ -33,24 +31,16 @@ Assets! Assets everywhere!
|
||||||
|
|
||||||
All the GD stuff was ripped straight from the GD spritesheets via [Absolute's texture splitter hack](https://youtu.be/pYQgIyNhow8). If you want a nice categorized version, [I've done all the dirty work for you.](https://www.mediafire.com/file/4d99bw1zhwcl507/textures.zip/file)
|
All the GD stuff was ripped straight from the GD spritesheets via [Absolute's texture splitter hack](https://youtu.be/pYQgIyNhow8). If you want a nice categorized version, [I've done all the dirty work for you.](https://www.mediafire.com/file/4d99bw1zhwcl507/textures.zip/file)
|
||||||
|
|
||||||
/blocks, /objects and /initial are used for the analysis page. I just put them in seperate folders for extra neatness.
|
I'd explain what's in all the subfolders but it's pretty obvious. I tried my best to organize everything nicely.
|
||||||
|
|
||||||
/gdfaces holds all the difficulty faces
|
|
||||||
|
|
||||||
/css has the CSS stuff. They're in a special folder so browsers won't cache them (in case of updates)
|
|
||||||
|
|
||||||
Figure out what /gauntlets and /iconkitbuttons have.
|
|
||||||
|
|
||||||
## Classes
|
## Classes
|
||||||
What's a class you ask? I still have no idea.
|
What's a class you ask? Good question.
|
||||||
|
|
||||||
Seriously, these things are *confusing*
|
|
||||||
|
|
||||||
I guess the best way to put it is uh... super fancy functions???
|
I guess the best way to put it is uh... super fancy functions???
|
||||||
|
|
||||||
Level.js parses the server's disgusting response and sends back a nice object with all the level info
|
Level.js parses the server's disgusting response and sends back a nice object with all the level info
|
||||||
|
|
||||||
XOR.js encrypts/decrypts stuff like GD passwords. I stole the code from somewhere so uh if you wrote it, please don't hunt me down
|
XOR.js encrypts/decrypts stuff like GD passwords
|
||||||
|
|
||||||
## HTML
|
## HTML
|
||||||
The HTML files! Nothing too fancy, since it can all be seen directly from gdbrowser. Note that profile.html and level.html have [[VARIABLES]] (name, id, etc) replaced by the server when they're sent.
|
The HTML files! Nothing too fancy, since it can all be seen directly from gdbrowser. Note that profile.html and level.html have [[VARIABLES]] (name, id, etc) replaced by the server when they're sent.
|
||||||
|
@ -64,8 +54,6 @@ parsePlist.js reads GJ_GameSheet02-uhd.plist and magically transforms it into ga
|
||||||
|
|
||||||
forms.json is a list of the different icon forms, their ingame filenames, and their index in responses from the GD servers
|
forms.json is a list of the different icon forms, their ingame filenames, and their index in responses from the GD servers
|
||||||
|
|
||||||
/iconkit is a folder for the little grey preview icons on the icon kit
|
|
||||||
|
|
||||||
## Misc
|
## Misc
|
||||||
Inevitable misc folder
|
Inevitable misc folder
|
||||||
|
|
||||||
|
@ -77,22 +65,28 @@ colorProperties.json - Color channel cheatsheet
|
||||||
|
|
||||||
initialProperties.json - Level settings cheatsheet
|
initialProperties.json - Level settings cheatsheet
|
||||||
|
|
||||||
objectProperties.json - Object property cheatsheet. Low budget version of [AlFas' one](https://github.com/gd-edit/GDAPI/blob/5a338c317b10ba0cb30d6175360c997a8a72502f/GDAPI/GDAPI/Enumerations/GeometryDash/ObjectParameter.cs)
|
objectProperties.json - Object property cheatsheet. Low budget version of [AlFas' one](https://github.com/AlFasGD/GDAPI/blob/master/GDAPI/GDAPI/Enumerations/GeometryDash/ObjectProperty.cs)
|
||||||
|
|
||||||
objects.json - IDs for portals, orbs, triggers, and misc stuff
|
objects.json - IDs for portals, orbs, triggers, and misc stuff
|
||||||
|
|
||||||
**Not for level analysis**
|
**Not for level analysis**
|
||||||
|
|
||||||
|
colors.json - List of icon colors in RGB format
|
||||||
|
|
||||||
credits.json - Credits! (shown on the homepage)
|
credits.json - Credits! (shown on the homepage)
|
||||||
|
|
||||||
|
dragscroll.js - Used on several pages for drag scrolling
|
||||||
|
|
||||||
level.json - An array of the official GD tracks, and also difficulty face stuff for level searching
|
level.json - An array of the official GD tracks, and also difficulty face stuff for level searching
|
||||||
|
|
||||||
|
sampleIcons.json - A pool of icons, one of which will randomly appear when visiting the icon kit. Syntax is [Name, ID, Col1, Col2, Glow],
|
||||||
|
|
||||||
secretStuff.json - GJP goes here, needed for level leaderboards. Not included in the repo for obvious reasons
|
secretStuff.json - GJP goes here, needed for level leaderboards. Not included in the repo for obvious reasons
|
||||||
|
|
||||||
settings.js - Tweak small settings here, mainly for local use or GDPS'es
|
settings.js - Tweak small settings here, mainly for local use or GDPS'es
|
||||||
|
|
||||||
sizecheck.js - Excecuted on most pages, used for the 'page isn't wide enough' message, back button, and a few other things
|
sizecheck.js - Excecuted on most pages. Used for the 'page isn't wide enough' message, back button, and a few other things
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
happy painting and god bless.
|
happy gdbrowsing and god bless.
|
|
@ -97,10 +97,10 @@ module.exports = async (app, req, res, api, ID, analyze) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (level.difficulty == "Extreme Demon") {
|
else if (level.difficulty == "Extreme Demon") {
|
||||||
request.get('https://www.pointercrate.com/api/v1/demons/?name=' + level.name.trim(), function (err, resp, demonList) {
|
request.get('https://www.pointercrate.com/api/v2/demons/?name=' + level.name.trim(), function (err, resp, demonList) {
|
||||||
if (err) return sendLevel()
|
if (err) return sendLevel()
|
||||||
let demon = JSON.parse(demonList)
|
let demon = JSON.parse(demonList)
|
||||||
if (demon[0] && demon[0].position <= 150) level.demonList = demon[0].position
|
if (demon[0] && demon[0].position) level.demonList = demon[0].position
|
||||||
return sendLevel()
|
return sendLevel()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,10 +69,10 @@ module.exports = async (app, req, res, api, analyze) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (level.difficulty == "Extreme Demon") {
|
if (level.difficulty == "Extreme Demon") {
|
||||||
request.get('http://www.pointercrate.com/api/v1/demons/?name=' + level.name.trim(), function (err, resp, demonList) {
|
request.get('http://www.pointercrate.com/api/v2/demons/?name=' + level.name.trim(), function (err, resp, demonList) {
|
||||||
if (err) return sendLevel()
|
if (err) return sendLevel()
|
||||||
let demon = JSON.parse(demonList)
|
let demon = JSON.parse(demonList)
|
||||||
if (demon[0] && demon[0].position <= 150) level.demonList = demon[0].position
|
if (demon[0] && demon[0].position) level.demonList = demon[0].position
|
||||||
return sendLevel()
|
return sendLevel()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,23 @@
|
||||||
const request = require('request')
|
const request = require('request')
|
||||||
const levels = require('../misc/level.json').music
|
const levels = require('../misc/level.json').music
|
||||||
const Level = require('../classes/Level.js')
|
const Level = require('../classes/Level.js')
|
||||||
|
let demonList = {list: [], lastUpdated: 0}
|
||||||
|
|
||||||
module.exports = async (app, req, res) => {
|
module.exports = async (app, req, res) => {
|
||||||
|
|
||||||
if (app.offline) return res.send("-1")
|
if (app.offline) return res.send("-1")
|
||||||
|
|
||||||
|
let demonMode = req.query.hasOwnProperty("demonlist") || req.query.hasOwnProperty("demonList") || req.query.type == "demonlist" || req.query.type == "demonList"
|
||||||
|
if (demonMode) {
|
||||||
|
if (!demonList.list.length || demonList.lastUpdated + 600000 < Date.now()) { // 10 minute cache
|
||||||
|
return request.get('http://www.pointercrate.com/api/v2/demons/listed/?limit=100', function (err, resp, list) {
|
||||||
|
if (err) return res.send("-1")
|
||||||
|
demonList = {list: JSON.parse(list).map(x => x.level_id), lastUpdated: Date.now()}
|
||||||
|
return app.run.search(app, req, res)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let amount = 10;
|
let amount = 10;
|
||||||
let count = +req.query.count
|
let count = +req.query.count
|
||||||
if (count && count > 0) {
|
if (count && count > 0) {
|
||||||
|
@ -37,22 +49,24 @@ module.exports = async (app, req, res) => {
|
||||||
count: amount
|
count: amount
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req.query.gauntlet || req.query.hasOwnProperty("mappack") || req.query.hasOwnProperty("list") || req.query.type == "saved") filters.type = 10
|
|
||||||
|
|
||||||
if (req.query.songID && filters.customSong == 0 && levels.find(x => req.query.songID.toLowerCase() == x[0].toLowerCase())) {
|
if (req.query.songID && filters.customSong == 0 && levels.find(x => req.query.songID.toLowerCase() == x[0].toLowerCase())) {
|
||||||
filters.song = levels.findIndex(x => req.query.songID.toLowerCase() == x[0].toLowerCase())
|
filters.song = levels.findIndex(x => req.query.songID.toLowerCase() == x[0].toLowerCase())
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req.query.type) {
|
if (req.query.type) {
|
||||||
let filterCheck = req.query.type.toLowerCase()
|
let filterCheck = req.query.type.toLowerCase()
|
||||||
if (filterCheck == 'mostdownloaded') filters.type = 1
|
switch(filterCheck) {
|
||||||
if (filterCheck == 'mostliked') filters.type = 2
|
case 'mostdownloaded': filters.type = 1; break;
|
||||||
if (filterCheck == 'trending') filters.type = 3
|
case 'mostliked': filters.type = 2; break;
|
||||||
if (filterCheck == 'recent') filters.type = 4
|
case 'trending': filters.type = 3; break;
|
||||||
if (filterCheck == 'featured') filters.type = 6
|
case 'recent': filters.type = 4; break;
|
||||||
if (filterCheck == 'magic') filters.type = 7
|
case 'featured': filters.type = 6; break;
|
||||||
if (filterCheck == 'awarded' || filterCheck == 'starred') filters.type = 11
|
case 'magic': filters.type = 7; break;
|
||||||
if (filterCheck == 'halloffame' || filterCheck == 'hof') filters.type = 16
|
case 'awarded': filters.type = 11; break;
|
||||||
|
case 'starred': filters.type = 11; break;
|
||||||
|
case 'halloffame': filters.type = 16; break;
|
||||||
|
case 'hof': filters.type = 16; break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req.query.hasOwnProperty("user")) {
|
if (req.query.hasOwnProperty("user")) {
|
||||||
|
@ -66,6 +80,15 @@ module.exports = async (app, req, res) => {
|
||||||
|
|
||||||
if (req.params.text == "*") delete filters.str
|
if (req.params.text == "*") delete filters.str
|
||||||
|
|
||||||
|
let listSize = 10
|
||||||
|
if (demonMode || req.query.gauntlet || ["mappack", "list", "saved"].some(x => req.query.hasOwnProperty(x))) {
|
||||||
|
filters.type = 10
|
||||||
|
filters.str = demonMode ? demonList.list : filters.str.split(",")
|
||||||
|
listSize = filters.str.length
|
||||||
|
filters.str = filters.str.slice(filters.page*amount, filters.page*amount + amount).join()
|
||||||
|
filters.page = 0
|
||||||
|
}
|
||||||
|
|
||||||
request.post(app.endpoint + 'getGJLevels21.php', req.gdParams(filters), async function(err, resp, body) {
|
request.post(app.endpoint + 'getGJLevels21.php', req.gdParams(filters), async function(err, resp, body) {
|
||||||
|
|
||||||
if (err || !body || body == '-1' || body.startsWith("<!")) return res.send("-1")
|
if (err || !body || body == '-1' || body.startsWith("<!")) return res.send("-1")
|
||||||
|
@ -118,8 +141,8 @@ module.exports = async (app, req, res) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (filters.type == 10) { // custom page stuff
|
else if (filters.type == 10) { // custom page stuff
|
||||||
level.results = levelArray.length
|
level.results = listSize
|
||||||
level.pages = amount ? +Math.ceil(levelArray.length / amount) : 1
|
level.pages = +Math.ceil(listSize / (amount || 10))
|
||||||
}
|
}
|
||||||
|
|
||||||
else { // normal page stuff
|
else { // normal page stuff
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
@font-face { font-family: Pusab; src: url('./../assets/Pusab.ttf') }
|
@font-face { font-family: Pusab; src: url('../../assets/Pusab.ttf') }
|
||||||
@font-face { font-family: Kaine; src: url('./../assets/boomlings/Kaine.ttf') }
|
@font-face { font-family: Kaine; src: url('../../assets/boomlings/Kaine.ttf') }
|
||||||
|
|
||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
@ -139,7 +139,7 @@ h2 {
|
||||||
|
|
||||||
#borderbox {
|
#borderbox {
|
||||||
border: 1.6vh solid;
|
border: 1.6vh solid;
|
||||||
border-image: url('./../assets/boomlings/border.png') 10% round;
|
border-image: url('../../assets/boomlings/border.png') 10% round;
|
||||||
border-radius: 3vh;
|
border-radius: 3vh;
|
||||||
width: 110vh;
|
width: 110vh;
|
||||||
height: 75%;
|
height: 75%;
|
||||||
|
@ -179,7 +179,7 @@ h2 {
|
||||||
border: 2.5vh solid transparent;
|
border: 2.5vh solid transparent;
|
||||||
border-radius: 3vh;
|
border-radius: 3vh;
|
||||||
background-color: #995533;
|
background-color: #995533;
|
||||||
border-image: url('./../assets/brownbox.png') 10% round;
|
border-image: url('../../assets/brownbox.png') 10% round;
|
||||||
}
|
}
|
||||||
|
|
||||||
@-moz-keyframes spin {
|
@-moz-keyframes spin {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
@font-face {font-family: Pusab; src: url('./../assets/Pusab.ttf')}
|
@font-face {font-family: Pusab; src: url('../../assets/Pusab.ttf')}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
@ -118,7 +118,7 @@ img, .noSelect {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
.outOfOrder {
|
.outOfOrder, .darkDiff {
|
||||||
filter: brightness(50%);
|
filter: brightness(50%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,7 +236,7 @@ input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:foc
|
||||||
.gdcheckbox {
|
.gdcheckbox {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
background-image: url(../assets/check-off.png);
|
background-image: url(../../assets/check-off.png);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: contain;
|
background-size: contain;
|
||||||
padding-right: 20%;
|
padding-right: 20%;
|
||||||
|
@ -244,7 +244,7 @@ input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:foc
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=checkbox]:checked + label.gdcheckbox {
|
input[type=checkbox]:checked + label.gdcheckbox {
|
||||||
background-image: url(../assets/check-on.png);
|
background-image: url(../../assets/check-on.png);
|
||||||
}
|
}
|
||||||
|
|
||||||
::placeholder {
|
::placeholder {
|
||||||
|
@ -315,14 +315,14 @@ input::-webkit-inner-spin-button {
|
||||||
border: 2.5vh solid transparent;
|
border: 2.5vh solid transparent;
|
||||||
border-radius: 3vh;
|
border-radius: 3vh;
|
||||||
background-color: #995533;
|
background-color: #995533;
|
||||||
border-image: url('./../assets/brownbox.png') 10% round;
|
border-image: url('../../assets/brownbox.png') 10% round;
|
||||||
}
|
}
|
||||||
|
|
||||||
.blueBox {
|
.blueBox {
|
||||||
border: 2.5vh solid transparent;
|
border: 2.5vh solid transparent;
|
||||||
border-radius: 3vh;
|
border-radius: 3vh;
|
||||||
background-color: #334499;
|
background-color: #334499;
|
||||||
border-image: url('./../assets/bluebox.png') 10% round;
|
border-image: url('../../assets/bluebox.png') 10% round;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fancybox {
|
.fancybox {
|
||||||
|
@ -331,7 +331,7 @@ input::-webkit-inner-spin-button {
|
||||||
border: 3.5vh solid transparent;
|
border: 3.5vh solid transparent;
|
||||||
border-radius: 3vh;
|
border-radius: 3vh;
|
||||||
background-color: #001931;
|
background-color: #001931;
|
||||||
border-image: url('./../assets/fancybox.png') 10% stretch;
|
border-image: url('../../assets/fancybox.png') 10% stretch;
|
||||||
border-image-slice: 65;
|
border-image-slice: 65;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -341,14 +341,14 @@ input::-webkit-inner-spin-button {
|
||||||
|
|
||||||
.epicbox {
|
.epicbox {
|
||||||
border: 3.5vh solid transparent;
|
border: 3.5vh solid transparent;
|
||||||
border-image: url('./../assets/epicbox.png') 20% stretch;
|
border-image: url('../../assets/epicbox.png') 20% stretch;
|
||||||
border-image-slice: 85 77;
|
border-image-slice: 85 77;
|
||||||
border-image-width: 9.5vh;
|
border-image-width: 9.5vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.leaderboardBox {
|
.leaderboardBox {
|
||||||
border: 3.5vh solid transparent;
|
border: 3.5vh solid transparent;
|
||||||
border-image: url('./../assets/leaderboardbox.png') 20% stretch;
|
border-image: url('../../assets/leaderboardbox.png') 20% stretch;
|
||||||
border-image-slice: 85 77;
|
border-image-slice: 85 77;
|
||||||
border-image-width: 9.5vh;
|
border-image-width: 9.5vh;
|
||||||
}
|
}
|
||||||
|
@ -387,6 +387,7 @@ input::-webkit-inner-spin-button {
|
||||||
margin-left: 0.8%;
|
margin-left: 0.8%;
|
||||||
margin-right: 0.8%;
|
margin-right: 0.8%;
|
||||||
filter: brightness(50%);
|
filter: brightness(50%);
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.diffDiv img {
|
.diffDiv img {
|
||||||
|
@ -394,13 +395,13 @@ input::-webkit-inner-spin-button {
|
||||||
}
|
}
|
||||||
|
|
||||||
.demonDiff {
|
.demonDiff {
|
||||||
margin-left: 2%;
|
margin-left: 1.93%;
|
||||||
margin-right: 2%;
|
margin-right: 1.93%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.demonDiff .smallTextWoo {
|
.demonDiff .smallTextWoo {
|
||||||
margin-top: 3%;
|
margin-top: 3.5%;
|
||||||
font-size: 2.7vh;
|
font-size: 2.7vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
@import url('https://fonts.googleapis.com/css?family=Roboto');
|
@import url('https://fonts.googleapis.com/css?family=Roboto');
|
||||||
@font-face {font-family: Pusab; src: url('./../assets/Pusab.ttf')}
|
@font-face {font-family: Pusab; src: url('../../assets/Pusab.ttf')}
|
||||||
|
|
||||||
.gdButton {
|
.gdButton {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
@ -291,7 +291,7 @@ input:focus, select:focus, textarea:focus, button:focus {
|
||||||
}
|
}
|
||||||
|
|
||||||
.iconSelected {
|
.iconSelected {
|
||||||
border-image: url('./../assets/select.png') 10 stretch !important;
|
border-image: url('../../assets/select.png') 10 stretch !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.iconTabButton, .glowToggle, .copyForm {
|
.iconTabButton, .glowToggle, .copyForm {
|
||||||
|
@ -418,7 +418,7 @@ input:focus, select:focus, textarea:focus, button:focus {
|
||||||
border: 17px solid transparent;
|
border: 17px solid transparent;
|
||||||
border-radius: 25px;
|
border-radius: 25px;
|
||||||
background-color: #995533;
|
background-color: #995533;
|
||||||
border-image: url('./../assets/brownbox.png') 10% round;
|
border-image: url('../../assets/brownbox.png') 10% round;
|
||||||
}
|
}
|
||||||
|
|
||||||
.xButton {
|
.xButton {
|
||||||
|
@ -455,7 +455,7 @@ input[type=checkbox] {
|
||||||
.gdcheckbox {
|
.gdcheckbox {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
background-image: url(../assets/check-off.png);
|
background-image: url(../../assets/check-off.png);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: contain;
|
background-size: contain;
|
||||||
padding-right: 40px;
|
padding-right: 40px;
|
||||||
|
@ -465,7 +465,7 @@ input[type=checkbox] {
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=checkbox]:checked + label.gdcheckbox {
|
input[type=checkbox]:checked + label.gdcheckbox {
|
||||||
background-image: url(../assets/check-on.png);
|
background-image: url(../../assets/check-on.png);
|
||||||
}
|
}
|
||||||
|
|
||||||
.bounce {
|
.bounce {
|
||||||
|
|
BIN
assets/deatheffects/0.png
Normal file
After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 9.2 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 3 KiB |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 4 KiB |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 822 B After Width: | Height: | Size: 822 B |
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 9 KiB After Width: | Height: | Size: 9 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 6 KiB After Width: | Height: | Size: 6 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 7 KiB After Width: | Height: | Size: 7 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |