deploy: 64ac63b5efc01ae098938190a8f915d65ec25b76

This commit is contained in:
koneko 2025-03-08 20:02:16 +00:00
parent 6056ec6ee8
commit 7b5b01728b
17 changed files with 305 additions and 227 deletions

View File

@ -1,4 +1,4 @@
import{u as We,G as te,v as re,x as Ve,l as se,M as g,E as u,e as D,y as ne,z as _,F as je,R as E,H as ae,I as ie,J as Ne,a as m,S as p,j as B,w as oe,K as $,L as $e,d as q,B as k,k as U,N as M,T as b,O as S,Q as qe,c as Ke,C as w,V as le,W as ue,X as de,Y as ce,Z as Ye,P as Je,h as Xe,b as K,D as he,_ as Y,$ as Qe,a0 as Ze,a1 as et}from"./index-WJSjzvvL.js";import{S as fe,T as J,B as tt,c as rt}from"./colorToUniform-Dzvfc6yy.js";const pe=class A extends We{constructor(e){e={...A.defaultOptions,...e},super(e),this.enabled=!0,this._state=fe.for2d(),this.blendMode=e.blendMode,this.padding=e.padding,typeof e.antialias=="boolean"?this.antialias=e.antialias?"on":"off":this.antialias=e.antialias,this.resolution=e.resolution,this.blendRequired=e.blendRequired,this.addResource("uTexture",0,1)}apply(e,t,r,n){e.applyFilter(this,t,r,n)}get blendMode(){return this._state.blendMode}set blendMode(e){this._state.blendMode=e}static from(e){const{gpu:t,gl:r,...n}=e;let a,i;return t&&(a=te.from(t)),r&&(i=re.from(r)),new A({gpuProgram:a,glProgram:i,...n})}};pe.defaultOptions={blendMode:"normal",resolution:1,padding:0,antialias:"off",blendRequired:!1};let st=pe;var nt=`in vec2 vMaskCoord; import{u as We,G as te,v as re,x as Ve,l as se,M as g,E as u,e as D,y as ne,z as _,F as je,R as E,H as ae,I as ie,J as Ne,a as m,S as p,j as B,w as oe,K as $,L as $e,d as q,B as k,k as U,N as M,T as b,O as S,Q as qe,c as Ke,C as w,V as le,W as ue,X as de,Y as ce,Z as Ye,P as Je,h as Xe,b as K,D as he,_ as Y,$ as Qe,a0 as Ze,a1 as et}from"./index-C74jkVpW.js";import{S as fe,T as J,B as tt,c as rt}from"./colorToUniform-BrndAOXx.js";const pe=class A extends We{constructor(e){e={...A.defaultOptions,...e},super(e),this.enabled=!0,this._state=fe.for2d(),this.blendMode=e.blendMode,this.padding=e.padding,typeof e.antialias=="boolean"?this.antialias=e.antialias?"on":"off":this.antialias=e.antialias,this.resolution=e.resolution,this.blendRequired=e.blendRequired,this.addResource("uTexture",0,1)}apply(e,t,r,n){e.applyFilter(this,t,r,n)}get blendMode(){return this._state.blendMode}set blendMode(e){this._state.blendMode=e}static from(e){const{gpu:t,gl:r,...n}=e;let a,i;return t&&(a=te.from(t)),r&&(i=re.from(r)),new A({gpuProgram:a,glProgram:i,...n})}};pe.defaultOptions={blendMode:"normal",resolution:1,padding:0,antialias:"off",blendRequired:!1};let st=pe;var nt=`in vec2 vMaskCoord;
in vec2 vTextureCoord; in vec2 vTextureCoord;
uniform sampler2D uTexture; uniform sampler2D uTexture;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
import{T as _,a as M,n as g}from"./index-WJSjzvvL.js";const P={normal:0,add:1,multiply:2,screen:3,overlay:4,erase:5,"normal-npm":6,"add-npm":7,"screen-npm":8,min:9,max:10},u=0,h=1,c=2,d=3,f=4,p=5,x=class b{constructor(){this.data=0,this.blendMode="normal",this.polygonOffset=0,this.blend=!0,this.depthMask=!0}get blend(){return!!(this.data&1<<u)}set blend(t){!!(this.data&1<<u)!==t&&(this.data^=1<<u)}get offsets(){return!!(this.data&1<<h)}set offsets(t){!!(this.data&1<<h)!==t&&(this.data^=1<<h)}set cullMode(t){if(t==="none"){this.culling=!1;return}this.culling=!0,this.clockwiseFrontFace=t==="front"}get cullMode(){return this.culling?this.clockwiseFrontFace?"front":"back":"none"}get culling(){return!!(this.data&1<<c)}set culling(t){!!(this.data&1<<c)!==t&&(this.data^=1<<c)}get depthTest(){return!!(this.data&1<<d)}set depthTest(t){!!(this.data&1<<d)!==t&&(this.data^=1<<d)}get depthMask(){return!!(this.data&1<<p)}set depthMask(t){!!(this.data&1<<p)!==t&&(this.data^=1<<p)}get clockwiseFrontFace(){return!!(this.data&1<<f)}set clockwiseFrontFace(t){!!(this.data&1<<f)!==t&&(this.data^=1<<f)}get blendMode(){return this._blendMode}set blendMode(t){this.blend=t!=="none",this._blendMode=t,this._blendModeId=P[t]||0}get polygonOffset(){return this._polygonOffset}set polygonOffset(t){this.offsets=!!t,this._polygonOffset=t}toString(){return`[pixi.js/core:State blendMode=${this.blendMode} clockwiseFrontFace=${this.clockwiseFrontFace} culling=${this.culling} depthMask=${this.depthMask} polygonOffset=${this.polygonOffset}]`}static for2d(){const t=new b;return t.depthTest=!1,t.blend=!0,t}};x.default2d=x.for2d();let w=x,T=0;class S{constructor(t){this._poolKeyHash=Object.create(null),this._texturePool={},this.textureOptions=t||{},this.enableFullScreen=!1}createTexture(t,o,e){const r=new _({...this.textureOptions,width:t,height:o,resolution:1,antialias:e,autoGarbageCollect:!0});return new M({source:r,label:`texturePool_${T++}`})}getOptimalTexture(t,o,e=1,r){let n=Math.ceil(t*e-1e-6),l=Math.ceil(o*e-1e-6);n=g(n),l=g(l);const a=(n<<17)+(l<<1)+(r?1:0);this._texturePool[a]||(this._texturePool[a]=[]);let s=this._texturePool[a].pop();return s||(s=this.createTexture(n,l,r)),s.source._resolution=e,s.source.width=n/e,s.source.height=l/e,s.source.pixelWidth=n,s.source.pixelHeight=l,s.frame.x=0,s.frame.y=0,s.frame.width=t,s.frame.height=o,s.updateUvs(),this._poolKeyHash[s.uid]=a,s}getSameSizeTexture(t,o=!1){const e=t.source;return this.getOptimalTexture(t.width,t.height,e._resolution,o)}returnTexture(t){const o=this._poolKeyHash[t.uid];this._texturePool[o].push(t)}clear(t){if(t=t!==!1,t)for(const o in this._texturePool){const e=this._texturePool[o];if(e)for(let r=0;r<e.length;r++)e[r].destroy(!0)}this._texturePool={}}}const k=new S,m={name:"local-uniform-bit",vertex:{header:` import{T as _,a as M,n as g}from"./index-C74jkVpW.js";const P={normal:0,add:1,multiply:2,screen:3,overlay:4,erase:5,"normal-npm":6,"add-npm":7,"screen-npm":8,min:9,max:10},u=0,h=1,c=2,d=3,f=4,p=5,x=class b{constructor(){this.data=0,this.blendMode="normal",this.polygonOffset=0,this.blend=!0,this.depthMask=!0}get blend(){return!!(this.data&1<<u)}set blend(t){!!(this.data&1<<u)!==t&&(this.data^=1<<u)}get offsets(){return!!(this.data&1<<h)}set offsets(t){!!(this.data&1<<h)!==t&&(this.data^=1<<h)}set cullMode(t){if(t==="none"){this.culling=!1;return}this.culling=!0,this.clockwiseFrontFace=t==="front"}get cullMode(){return this.culling?this.clockwiseFrontFace?"front":"back":"none"}get culling(){return!!(this.data&1<<c)}set culling(t){!!(this.data&1<<c)!==t&&(this.data^=1<<c)}get depthTest(){return!!(this.data&1<<d)}set depthTest(t){!!(this.data&1<<d)!==t&&(this.data^=1<<d)}get depthMask(){return!!(this.data&1<<p)}set depthMask(t){!!(this.data&1<<p)!==t&&(this.data^=1<<p)}get clockwiseFrontFace(){return!!(this.data&1<<f)}set clockwiseFrontFace(t){!!(this.data&1<<f)!==t&&(this.data^=1<<f)}get blendMode(){return this._blendMode}set blendMode(t){this.blend=t!=="none",this._blendMode=t,this._blendModeId=P[t]||0}get polygonOffset(){return this._polygonOffset}set polygonOffset(t){this.offsets=!!t,this._polygonOffset=t}toString(){return`[pixi.js/core:State blendMode=${this.blendMode} clockwiseFrontFace=${this.clockwiseFrontFace} culling=${this.culling} depthMask=${this.depthMask} polygonOffset=${this.polygonOffset}]`}static for2d(){const t=new b;return t.depthTest=!1,t.blend=!0,t}};x.default2d=x.for2d();let w=x,T=0;class S{constructor(t){this._poolKeyHash=Object.create(null),this._texturePool={},this.textureOptions=t||{},this.enableFullScreen=!1}createTexture(t,o,e){const r=new _({...this.textureOptions,width:t,height:o,resolution:1,antialias:e,autoGarbageCollect:!0});return new M({source:r,label:`texturePool_${T++}`})}getOptimalTexture(t,o,e=1,r){let n=Math.ceil(t*e-1e-6),l=Math.ceil(o*e-1e-6);n=g(n),l=g(l);const a=(n<<17)+(l<<1)+(r?1:0);this._texturePool[a]||(this._texturePool[a]=[]);let s=this._texturePool[a].pop();return s||(s=this.createTexture(n,l,r)),s.source._resolution=e,s.source.width=n/e,s.source.height=l/e,s.source.pixelWidth=n,s.source.pixelHeight=l,s.frame.x=0,s.frame.y=0,s.frame.width=t,s.frame.height=o,s.updateUvs(),this._poolKeyHash[s.uid]=a,s}getSameSizeTexture(t,o=!1){const e=t.source;return this.getOptimalTexture(t.width,t.height,e._resolution,o)}returnTexture(t){const o=this._poolKeyHash[t.uid];this._texturePool[o].push(t)}clear(t){if(t=t!==!1,t)for(const o in this._texturePool){const e=this._texturePool[o];if(e)for(let r=0;r<e.length;r++)e[r].destroy(!0)}this._texturePool={}}}const k=new S,m={name:"local-uniform-bit",vertex:{header:`
struct LocalUniforms { struct LocalUniforms {
uTransformMatrix:mat3x3<f32>, uTransformMatrix:mat3x3<f32>,

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

File diff suppressed because one or more lines are too long

View File

@ -2,14 +2,15 @@
{ {
"name": "basic", "name": "basic",
"sprite": "wood", "sprite": "wood",
"tint": "0xffffff",
"textures": [], "textures": [],
"textureArrayLength": 12, "textureArrayLength": 12,
"stats": { "stats": {
"health": 5, "health": 2,
"speed": 4, "speed": 3,
"special": null, "special": null,
"resistance": { "resistance": {
"physical": 0, "physical": 0.05,
"divine": 0, "divine": 0,
"fire": 0, "fire": 0,
"ice": 0, "ice": 0,
@ -20,11 +21,12 @@
{ {
"name": "quick", "name": "quick",
"sprite": "zombie", "sprite": "zombie",
"tint": "0xffffff",
"textures": [], "textures": [],
"textureArrayLength": 8, "textureArrayLength": 8,
"stats": { "stats": {
"health": 2, "health": 1,
"speed": 6, "speed": 5,
"special": null, "special": null,
"resistance": { "resistance": {
"physical": 0, "physical": 0,
@ -38,10 +40,11 @@
{ {
"name": "tank", "name": "tank",
"sprite": "skeleton", "sprite": "skeleton",
"tint": "0xffffff",
"textures": [], "textures": [],
"textureArrayLength": 12, "textureArrayLength": 12,
"stats": { "stats": {
"health": 12, "health": 5,
"speed": 2, "speed": 2,
"special": null, "special": null,
"resistance": { "resistance": {
@ -56,29 +59,50 @@
{ {
"name": "cloaker", "name": "cloaker",
"sprite": "hood", "sprite": "hood",
"tint": "0xffffff",
"textures": [], "textures": [],
"textureArrayLength": 12, "textureArrayLength": 12,
"stats": { "stats": {
"health": 12, "health": 7,
"speed": 2, "speed": 3,
"special": null, "special": null,
"resistance": { "resistance": {
"physical": 0, "physical": 0,
"divine": 0, "divine": 1,
"fire": 0, "fire": 1,
"ice": 0, "ice": 1,
"frostfire": 0 "frostfire": 1
} }
} }
}, },
{ {
"name": "demon", "name": "demon",
"sprite": "demon", "sprite": "demon",
"tint": "0xffffff",
"textures": [], "textures": [],
"textureArrayLength": 8, "textureArrayLength": 8,
"stats": { "stats": {
"health": 12, "health": 5,
"speed": 2, "speed": 3,
"special": null,
"resistance": {
"physical": 1,
"divine": -0.25,
"fire": 1,
"ice": 1,
"frostfire": 1
}
}
},
{
"name": "maker",
"sprite": "pumpkin",
"tint": "0xffffff",
"textures": [],
"textureArrayLength": 11,
"stats": {
"health": 5,
"speed": 3,
"special": null, "special": null,
"resistance": { "resistance": {
"physical": 0, "physical": 0,
@ -89,17 +113,57 @@
} }
} }
}, },
{ {
"name": "maker", "name": "monster",
"sprite": "pumpkin", "sprite": "green",
"tint": "0xffffff",
"textures": [], "textures": [],
"textureArrayLength": 11, "textureArrayLength": 12,
"stats": { "stats": {
"health": 11, "health": 30,
"speed": 2, "speed": 1,
"special": null, "special": null,
"resistance": { "resistance": {
"physical": 0, "physical": 0.05,
"divine": 0.05,
"fire": -0.25,
"ice": 0.05,
"frostfire": 0.05
}
}
},
{
"name": "remaker",
"sprite": "orange",
"tint": "0xffffff",
"textures": [],
"textureArrayLength": 12,
"stats": {
"health": 2,
"speed": 3,
"special": null,
"resistance": {
"physical": 0.05,
"divine": 0,
"fire": 0,
"ice": 0,
"frostfire": 0
}
}
},
{
"name": "elite",
"sprite": "phood",
"tint": "0xffffff",
"textures": [],
"textureArrayLength": 12,
"stats": {
"health": 2,
"speed": 3,
"special": null,
"resistance": {
"physical": 0.05,
"divine": 0, "divine": 0,
"fire": 0, "fire": 0,
"ice": 0, "ice": 0,

View File

@ -8,7 +8,7 @@
"textures": [], "textures": [],
"cantCombineWith": [], "cantCombineWith": [],
"specialCombine": [], "specialCombine": [],
"initialGemValue": 50, "initialGemValue": 75,
"genericImprovements": [ "genericImprovements": [
{ {
"damageUp": 1, "damageUp": 1,
@ -29,9 +29,9 @@
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 0, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 2,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 250 "gemValueUp": 250
}, },
{ {
@ -47,12 +47,12 @@
"attackSpeedUp": 0, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 650 "gemValueUp": 650
}, },
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 0, "attackSpeedUp": 100,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 1,
@ -63,7 +63,7 @@
"attackSpeedUp": 0, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 900 "gemValueUp": 900
}, },
{ {
@ -76,7 +76,7 @@
}, },
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 0, "attackSpeedUp": 250,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 1,
@ -158,71 +158,71 @@
"textures": [], "textures": [],
"cantCombineWith": [], "cantCombineWith": [],
"specialCombine": [], "specialCombine": [],
"initialGemValue": 10, "initialGemValue": 80,
"genericImprovements": [ "genericImprovements": [
{ {
"damageUp": 2, "damageUp": 1,
"attackSpeedUp": 10, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 0 "gemValueUp": 100
}, },
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 10, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 1,
"gemValueUp": 10 "gemValueUp": 150
}, },
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 10, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 2,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 0 "gemValueUp": 250
}, },
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 10, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 1,
"gemValueUp": 10 "gemValueUp": 400
}, },
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 10, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 0 "gemValueUp": 650
}, },
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 10, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 1,
"gemValueUp": 10 "gemValueUp": 750
}, },
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 10, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 0 "gemValueUp": 900
}, },
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 10, "attackSpeedUp": 100,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 1,
"gemValueUp": 10 "gemValueUp": 1000
} }
], ],
"gemResistanceModifications": [ "gemResistanceModifications": [
@ -230,14 +230,7 @@
"physical": 0, "physical": 0,
"divine": 0, "divine": 0,
"fire": 0, "fire": 0,
"ice": 0.1, "ice": 0.05,
"frostfire": 0
},
{
"physical": 0,
"divine": 0,
"fire": 0,
"ice": 0.2,
"frostfire": 0 "frostfire": 0
}, },
{ {
@ -251,14 +244,7 @@
"physical": 0, "physical": 0,
"divine": 0, "divine": 0,
"fire": 0, "fire": 0,
"ice": 0.2, "ice": 0.15,
"frostfire": 0
},
{
"physical": 0,
"divine": 0,
"fire": 0,
"ice": 0.1,
"frostfire": 0 "frostfire": 0
}, },
{ {
@ -272,15 +258,29 @@
"physical": 0, "physical": 0,
"divine": 0, "divine": 0,
"fire": 0, "fire": 0,
"ice": 0.1, "ice": 0.25,
"frostfire": 0 "frostfire": 0.1
}, },
{ {
"physical": 0, "physical": 0,
"divine": 0, "divine": 0,
"fire": 0, "fire": 0,
"ice": 0.2, "ice": 0.3,
"frostfire": 0 "frostfire": 0.1
},
{
"physical": 0,
"divine": 0,
"fire": 0,
"ice": 0.35,
"frostfire": 0.2
},
{
"physical": 0,
"divine": 0,
"fire": 0,
"ice": 0.4,
"frostfire": 0.25
} }
] ]
}, },
@ -293,63 +293,63 @@
"textures": [], "textures": [],
"cantCombineWith": [], "cantCombineWith": [],
"specialCombine": [], "specialCombine": [],
"initialGemValue": 10, "initialGemValue": 100,
"genericImprovements": [ "genericImprovements": [
{ {
"damageUp": 2, "damageUp": 1,
"attackSpeedUp": 10, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 1,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 0 "gemValueUp": 200
}, },
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 10, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 1,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 1,
"gemValueUp": 10 "gemValueUp": 350
}, },
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 10, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 1,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 2,
"gemValueUp": 0 "gemValueUp": 450
}, },
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 10, "attackSpeedUp": 200,
"rangeUp": 0, "rangeUp": 1,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 1,
"gemValueUp": 10 "gemValueUp": 600
}, },
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 10, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 1,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 0 "gemValueUp": 850
}, },
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 10, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 10 "gemValueUp": 900
}, },
{ {
"damageUp": 2, "damageUp": 2,
"attackSpeedUp": 10, "attackSpeedUp": 0,
"rangeUp": 0, "rangeUp": 2,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 0 "gemValueUp": 900
} }
], ],
"gemResistanceModifications": [ "gemResistanceModifications": [
@ -357,49 +357,56 @@
"physical": 0, "physical": 0,
"divine": 0, "divine": 0,
"fire": 0, "fire": 0,
"ice": 0.1, "ice": 0,
"frostfire": 0 "frostfire": 0
}, },
{ {
"physical": 0, "physical": 0.05,
"divine": 0, "divine": 0,
"fire": 0, "fire": 0,
"ice": 0.2, "ice": 0,
"frostfire": 0 "frostfire": 0
}, },
{ {
"physical": 0, "physical": 0.1,
"divine": 0, "divine": 0,
"fire": 0, "fire": 0,
"ice": 0.1, "ice": 0,
"frostfire": 0 "frostfire": 0
}, },
{ {
"physical": 0, "physical": 0.1,
"divine": 0, "divine": 0,
"fire": 0, "fire": 0,
"ice": 0.2, "ice": 0,
"frostfire": 0 "frostfire": 0
}, },
{ {
"physical": 0, "physical": 0.15,
"divine": 0, "divine": 0,
"fire": 0, "fire": 0,
"ice": 0.1, "ice": 0,
"frostfire": 0 "frostfire": 0
}, },
{ {
"physical": 0, "physical": 0.2,
"divine": 0, "divine": 0,
"fire": 0, "fire": 0,
"ice": 0.2, "ice": 0,
"frostfire": 0 "frostfire": 0
}, },
{ {
"physical": 0, "physical": 0.25,
"divine": 0, "divine": 0,
"fire": 0, "fire": 0,
"ice": 0.1, "ice": 0,
"frostfire": 0
},
{
"physical": 0.3,
"divine": 0,
"fire": 0,
"ice": 0,
"frostfire": 0 "frostfire": 0
} }
] ]
@ -409,132 +416,124 @@
"description": "Made from the wandering souls of the damned, the Soulforge gem accelerates your towers cooldowns and acts as a repellant for all things unholy.", "description": "Made from the wandering souls of the damned, the Soulforge gem accelerates your towers cooldowns and acts as a repellant for all things unholy.",
"color": "gray", "color": "gray",
"type": "Soulforge", "type": "Soulforge",
"totalLevels": 2, "totalLevels": 7,
"textures": [], "textures": [],
"cantCombineWith": [], "cantCombineWith": [],
"specialCombine": [], "specialCombine": [],
"initialGemValue": 10, "initialGemValue": 150,
"genericImprovements": [ "genericImprovements": [
{ {
"damageUp": 2, "damageUp": 0,
"attackSpeedUp": 10, "attackSpeedUp": 100,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 0 "gemValueUp": 200
}, },
{ {
"damageUp": 2, "damageUp": 0,
"attackSpeedUp": 10, "attackSpeedUp": 100,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 1,
"gemValueUp": 10 "gemValueUp": 350
}, },
{ {
"damageUp": 2, "damageUp": 0,
"attackSpeedUp": 10, "attackSpeedUp": 150,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 0 "gemValueUp": 450
}, },
{ {
"damageUp": 2, "damageUp": 0,
"attackSpeedUp": 10, "attackSpeedUp": 100,
"rangeUp": 0, "rangeUp": 1,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 10 "gemValueUp": 600
}, },
{ {
"damageUp": 2, "damageUp": 0,
"attackSpeedUp": 10, "attackSpeedUp": 250,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 1,
"gemValueUp": 0 "gemValueUp": 850
}, },
{ {
"damageUp": 2, "damageUp": 0,
"attackSpeedUp": 10, "attackSpeedUp": 400,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 10 "gemValueUp": 900
}, },
{ {
"damageUp": 2, "damageUp": 0,
"attackSpeedUp": 10, "attackSpeedUp": 500,
"rangeUp": 0, "rangeUp": 0,
"timeToLiveUp": 0, "timeToLiveUp": 0,
"pierceUp": 1, "pierceUp": 0,
"gemValueUp": 0 "gemValueUp": 900
},
{
"damageUp": 2,
"attackSpeedUp": 10,
"rangeUp": 0,
"timeToLiveUp": 0,
"pierceUp": 1,
"gemValueUp": 10
} }
], ],
"gemResistanceModifications": [ "gemResistanceModifications": [
{ {
"physical": 0, "physical": 0,
"divine": 0, "divine": 0.2,
"fire": 0, "fire": 0,
"ice": 0.1, "ice": 0,
"frostfire": 0 "frostfire": 0
}, },
{ {
"physical": 0, "physical": 0,
"divine": 0, "divine": 0.3,
"fire": 0, "fire": 0,
"ice": 0.2, "ice": 0,
"frostfire": 0 "frostfire": 0
}, },
{ {
"physical": 0, "physical": 0,
"divine": 0, "divine": 0.4,
"fire": 0, "fire": 0,
"ice": 0.1, "ice": 0,
"frostfire": 0 "frostfire": 0
}, },
{ {
"physical": 0, "physical": 0,
"divine": 0, "divine": 0.5,
"fire": 0, "fire": 0,
"ice": 0.2, "ice": 0,
"frostfire": 0 "frostfire": 0
}, },
{ {
"physical": 0, "physical": 0,
"divine": 0, "divine": 0.6,
"fire": 0, "fire": 0,
"ice": 0.1, "ice": 0,
"frostfire": 0 "frostfire": 0
}, },
{ {
"physical": 0, "physical": 0,
"divine": 0, "divine": 0.7,
"fire": 0, "fire": 0,
"ice": 0.2, "ice": 0,
"frostfire": 0 "frostfire": 0
}, },
{ {
"physical": 0, "physical": 0,
"divine": 0, "divine": 0.75,
"fire": 0, "fire": 0,
"ice": 0.1, "ice": 0,
"frostfire": 0 "frostfire": 0
}, },
{ {
"physical": 0, "physical": 0,
"divine": 0, "divine": 0.8,
"fire": 0, "fire": 0,
"ice": 0.2, "ice": 0,
"frostfire": 0 "frostfire": 0
} }
] ]
@ -585,7 +584,7 @@
"attackSpeedUp": 100, "attackSpeedUp": 100,
"rangeUp": 2, "rangeUp": 2,
"timeToLiveUp": 200, "timeToLiveUp": 200,
"pierceUp": 20, "pierceUp": 3,
"gemValueUp": 0 "gemValueUp": 0
} }
], ],

View File

@ -9,13 +9,13 @@
"projectileTexturesArrayLength": 5, "projectileTexturesArrayLength": 5,
"description": "The building block of society, nothing more basic exists.", "description": "The building block of society, nothing more basic exists.",
"stats": { "stats": {
"damage": 2, "damage": 1,
"cooldown": 1500, "cooldown": 1500,
"gemSlotsAmount": 1, "gemSlotsAmount": 1,
"cost": 50, "cost": 25,
"range": 3, "range": 3,
"timeToLive": 20, "timeToLive": 20,
"pierce": 2 "pierce": 1
} }
}, },
{ {
@ -26,15 +26,15 @@
"projectile": "blue", "projectile": "blue",
"projectileTextures": [], "projectileTextures": [],
"projectileTexturesArrayLength": 4, "projectileTexturesArrayLength": 4,
"description": "If you feel like shooting in a circle around you, projectiles may miss.", "description": "Shoots 8 projectiles in a circle, they may miss.",
"stats": { "stats": {
"damage": 3, "damage": 1,
"cooldown": 4000, "cooldown": 2000,
"gemSlotsAmount": 2, "gemSlotsAmount": 2,
"cost": 100, "cost": 55,
"range": 2.5, "range": 3,
"timeToLive": 12, "timeToLive": 18,
"pierce": 30 "pierce": 5
} }
}, },
{ {
@ -47,13 +47,13 @@
"projectileTexturesArrayLength": 4, "projectileTexturesArrayLength": 4,
"description": "Zap zap zap! This towers shots connect to other enemies!", "description": "Zap zap zap! This towers shots connect to other enemies!",
"stats": { "stats": {
"damage": 3, "damage": 2,
"cooldown": 3500, "cooldown": 3500,
"gemSlotsAmount": 2, "gemSlotsAmount": 2,
"cost": 150, "cost": 110,
"range": 3, "range": 3,
"timeToLive": 12, "timeToLive": 12,
"pierce": 10 "pierce": 1
} }
}, },
{ {
@ -64,13 +64,13 @@
"projectile": "blue", "projectile": "blue",
"projectileTextures": [], "projectileTextures": [],
"projectileTexturesArrayLength": 4, "projectileTexturesArrayLength": 4,
"description": "Doesn't shoot, instead buffs other towers with 50% of its power.", "description": "Doesn't shoot, instead buffs other towers with some of its power.",
"stats": { "stats": {
"damage": 4, "damage": 3,
"cooldown": 1000, "cooldown": 1000,
"gemSlotsAmount": 3, "gemSlotsAmount": 3,
"cost": 200, "cost": 200,
"range": 2, "range": 2.5,
"timeToLive": 15, "timeToLive": 15,
"pierce": 5 "pierce": 5
} }
@ -83,15 +83,15 @@
"projectile": "white", "projectile": "white",
"projectileTextures": [], "projectileTextures": [],
"projectileTexturesArrayLength": 5, "projectileTexturesArrayLength": 5,
"description": "Like a regular tower, just slows down creeps.", "description": "Behaves like the Basic Tower, only its shots stop creeps in their tracks!",
"stats": { "stats": {
"damage": 2, "damage": 2,
"cooldown": 2000, "cooldown": 2200,
"gemSlotsAmount": 3, "gemSlotsAmount": 2,
"cost": 125, "cost": 80,
"range": 2.5, "range": 3.25,
"timeToLive": 12, "timeToLive": 12,
"pierce": 1 "pierce": 2
} }
}, },
{ {
@ -104,13 +104,13 @@
"projectileTexturesArrayLength": 4, "projectileTexturesArrayLength": 4,
"description": "Shoots a quick, high pierce rail projectile at creeps.", "description": "Shoots a quick, high pierce rail projectile at creeps.",
"stats": { "stats": {
"damage": 2, "damage": 5,
"cooldown": 2000, "cooldown": 5020,
"gemSlotsAmount": 3, "gemSlotsAmount": 3,
"cost": 125, "cost": 134,
"range": 2.5, "range": 2.5,
"timeToLive": 12, "timeToLive": 12,
"pierce": 30 "pierce": 10
} }
}, },
{ {
@ -121,15 +121,15 @@
"projectile": "stone", "projectile": "stone",
"projectileTextures": [], "projectileTextures": [],
"projectileTexturesArrayLength": 1, "projectileTexturesArrayLength": 1,
"description": "Randomly places traps on the track, instead of attacking creeps.", "description": "Randomly places expiring traps on the track, instead of attacking creeps.",
"stats": { "stats": {
"damage": 2, "damage": 2,
"cooldown": 2000, "cooldown": 2000,
"gemSlotsAmount": 3, "gemSlotsAmount": 3,
"cost": 125, "cost": 150,
"range": 2.5, "range": 3,
"timeToLive": 400, "timeToLive": 400,
"pierce": 2 "pierce": 3
} }
}, },
{ {
@ -143,12 +143,12 @@
"description": "On top of a regular attack, this tower gives creeps a debuff, making them take more damage.", "description": "On top of a regular attack, this tower gives creeps a debuff, making them take more damage.",
"stats": { "stats": {
"damage": 2, "damage": 2,
"cooldown": 2000, "cooldown": 1750,
"gemSlotsAmount": 3, "gemSlotsAmount": 3,
"cost": 125, "cost": 200,
"range": 2.5, "range": 2.5,
"timeToLive": 12, "timeToLive": 12,
"pierce": 30 "pierce": 2
} }
} }
] ]

View File

@ -62,15 +62,30 @@
{ {
"firstCreepSpawnTick": 500, "firstCreepSpawnTick": 500,
"spawnIntervalTicks": 1000, "spawnIntervalTicks": 1000,
"creeps": [0, 0, 0] "creeps": [0, 0, 0, 0, 0]
}, },
{ {
"firstCreepSpawnTick": 4000, "firstCreepSpawnTick": 4000,
"spawnIntervalTicks": 1000, "spawnIntervalTicks": 1000,
"creeps": [0, 0, 0, 0] "creeps": [0, 0, 0, 0, 0]
} }
], ],
"offeredGems": [0, 1] "offeredGems": [0, 1, 0, 1]
},
{
"waves": [
{
"firstCreepSpawnTick": 500,
"spawnIntervalTicks": 1000,
"creeps": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
},
{
"firstCreepSpawnTick": 1000,
"spawnIntervalTicks": 1000,
"creeps": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
}
],
"offeredGems": [0, 1, 0, 1]
} }
] ]
} }

View File

@ -99,7 +99,7 @@
{ {
"firstCreepSpawnTick": 500, "firstCreepSpawnTick": 500,
"spawnIntervalTicks": 500, "spawnIntervalTicks": 500,
"creeps": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 2] "creeps": [0]
} }
], ],
"offeredGems": [0, 0, 0, 0] "offeredGems": [0, 0, 0, 0]

File diff suppressed because one or more lines are too long

View File

@ -4,21 +4,20 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" /> <link rel="stylesheet" href="style.css" />
<link href="https://fonts.googleapis.com/css?family=Aclonica" rel="stylesheet" /> <title>Bastion: The Watchers Lament</title>
<title>Bastion: The Watcher's Lament</title> <meta property="og:title" content="Bastion: The Watchers Lament" />
<meta property="og:title" content="Bastion: The Watcher's Lament" />
<meta <meta
property="og:description" property="og:description"
content="A free, open source, browser based, tower defense game inspired by GemCraft: Frostborn Wrath. Playable NOW on PC!" content="A free, open source, browser based, tower defense game inspired by GemCraft: Frostborn Wrath. Playable NOW on PC!"
/> />
<meta property="og:image" content="https://bastion.overflow.fun/faivcon.png" /> <meta property="og:image" content="https://bastion.overflow.fun/favicon.png" />
<meta property="og:url" content="https://bastion.overflow.fun" /> <meta property="og:url" content="https://bastion.overflow.fun" />
<meta name="twitter:title" content="Bastion: The Watcher's Lament" /> <meta name="twitter:title" content="Bastion: The Watchers Lament" />
<meta <meta
name="twitter:description" name="twitter:description"
content="A free, open source, browser based, tower defense game inspired by GemCraft: Frostborn Wrath. Playable NOW on PC!" content="A free, open source, browser based, tower defense game inspired by GemCraft: Frostborn Wrath. Playable NOW on PC!"
/> />
<script type="module" crossorigin src="/assets/index-WJSjzvvL.js"></script> <script type="module" crossorigin src="/assets/index-C74jkVpW.js"></script>
</head> </head>
<body> <body>
</body> </body>

View File

@ -1 +1 @@
bdeb67e 64ac63b