heck yeah cute anim
This commit is contained in:
parent
3ad8f55829
commit
b1aa4a4406
|
@ -23,8 +23,11 @@
|
||||||
|
|
||||||
<script src="scripts/game/Game.js"></script>
|
<script src="scripts/game/Game.js"></script>
|
||||||
<script src="scripts/game/Sprite.js"></script>
|
<script src="scripts/game/Sprite.js"></script>
|
||||||
<script src="scripts/game/Beebee.js"></script>
|
|
||||||
<script src="scripts/game/HP.js"></script>
|
<script src="scripts/game/HP.js"></script>
|
||||||
<script src="scripts/game/SceneSetup.js"></script>
|
<script src="scripts/game/SceneSetup.js"></script>
|
||||||
|
<script src="scripts/game/BGAnxiety.js"></script>
|
||||||
|
|
||||||
|
<script src="scripts/game/Hong.js"></script>
|
||||||
|
<script src="scripts/game/Beebee.js"></script>
|
||||||
|
|
||||||
<script src="scripts/main.js"></script>
|
<script src="scripts/main.js"></script>
|
|
@ -10,38 +10,50 @@ Oh no!
|
||||||
|
|
||||||
# demo-attacks
|
# demo-attacks
|
||||||
|
|
||||||
|
`publish("beebee",["normal"])`
|
||||||
|
|
||||||
[Attack 10 points](#demo-attack-low)
|
[Attack 10 points](#demo-attack-low)
|
||||||
|
|
||||||
[Attack 20 points](#demo-attack-med)
|
[Attack 20 points](#demo-attack-med)
|
||||||
|
|
||||||
[Attack 50%](#demo-attack-hi)
|
[Attack 50%](#demo-attack-hi)
|
||||||
|
|
||||||
|
# attack
|
||||||
|
|
||||||
|
`publish("beebee",["scream"])`
|
||||||
|
|
||||||
|
`publish("hong",["shock"])`
|
||||||
|
|
||||||
|
(...1500)
|
||||||
|
|
||||||
|
{{if HP.hong==0}} (#dead) {{/if}}
|
||||||
|
|
||||||
|
`publish("hong",["normal"])`
|
||||||
|
|
||||||
|
(#demo-attacks)
|
||||||
|
|
||||||
# demo-attack-low
|
# demo-attack-low
|
||||||
|
|
||||||
`HP.attackHong("10p")`
|
`HP.attackHong("10p")`
|
||||||
|
|
||||||
{{if HP.hong==0}} (#dead) {{/if}}
|
(#attack)
|
||||||
|
|
||||||
(#demo-attacks)
|
|
||||||
|
|
||||||
# demo-attack-med
|
# demo-attack-med
|
||||||
|
|
||||||
`HP.attackHong("20p")`
|
`HP.attackHong("20p")`
|
||||||
|
|
||||||
{{if HP.hong==0}} (#dead) {{/if}}
|
(#attack)
|
||||||
|
|
||||||
(#demo-attacks)
|
|
||||||
|
|
||||||
# demo-attack-hi
|
# demo-attack-hi
|
||||||
|
|
||||||
`HP.attackHong("50%")`
|
`HP.attackHong("50%")`
|
||||||
|
|
||||||
{{if HP.hong==0}} (#dead) {{/if}}
|
(#attack)
|
||||||
|
|
||||||
(#demo-attacks)
|
|
||||||
|
|
||||||
# dead
|
# dead
|
||||||
|
|
||||||
|
`publish("beebee",["normal_speak"])`
|
||||||
|
|
||||||
i am ded
|
i am ded
|
||||||
|
|
||||||
> u r ded
|
> u r ded
|
||||||
|
|
|
@ -0,0 +1,108 @@
|
||||||
|
/******************************
|
||||||
|
|
||||||
|
A cool floating-squares dark background...
|
||||||
|
or maybe CA?
|
||||||
|
|
||||||
|
******************************/
|
||||||
|
|
||||||
|
function BGAnxiety(){
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
// Moving white boxes
|
||||||
|
var BG_WIDTH = 360;
|
||||||
|
var BG_HEIGHT = 450;
|
||||||
|
self.boxes = [];
|
||||||
|
self.resetBox = function(box, startInView){
|
||||||
|
|
||||||
|
// Random size
|
||||||
|
box.w = box.h = Math.random()*200 + 100;
|
||||||
|
|
||||||
|
// Start in view?
|
||||||
|
if(startInView){
|
||||||
|
// Random position
|
||||||
|
box.x = Math.random()*(BG_WIDTH+box.w*2) - box.w;
|
||||||
|
box.y = Math.random()*(BG_HEIGHT+box.h*2) - box.h;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Move horizontal-only or vertical-only
|
||||||
|
if(Math.random()<0.5){
|
||||||
|
box.velX = (Math.random()>0.5 ? -1 : 1) * (Math.random()*0.8+0.2);
|
||||||
|
box.velY = 0;
|
||||||
|
}else{
|
||||||
|
box.velX = 0;
|
||||||
|
box.velY = (Math.random()>0.5 ? -1 : 1) * (Math.random()*0.8+0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If NOT start in view, use Velocity to determine where to put box
|
||||||
|
if(!startInView){
|
||||||
|
|
||||||
|
// Horizontal
|
||||||
|
if(box.velY==0){
|
||||||
|
box.y = Math.random()*(BG_HEIGHT+box.h*2) - box.h;
|
||||||
|
if(box.velX>0){ // ltr
|
||||||
|
box.x = -box.w;
|
||||||
|
}else{ // rtl
|
||||||
|
box.x = BG_WIDTH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vertical
|
||||||
|
if(box.velX==0){
|
||||||
|
box.x = Math.random()*(BG_WIDTH+box.w*2) - box.w;
|
||||||
|
if(box.velY>0){ // utd
|
||||||
|
box.y = -box.h;
|
||||||
|
}else{ // dtu
|
||||||
|
box.y = BG_HEIGHT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
self.isBoxOutOfSight = function(box){
|
||||||
|
if(box.x<-box.w) return true;
|
||||||
|
if(box.y<-box.h) return true;
|
||||||
|
if(box.x>BG_WIDTH) return true;
|
||||||
|
if(box.y>BG_HEIGHT) return true;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
self.updateBox = function(box){
|
||||||
|
|
||||||
|
// Move it
|
||||||
|
box.x += box.velX;
|
||||||
|
box.y += box.velY;
|
||||||
|
|
||||||
|
// If it's out of sight, reset it
|
||||||
|
if(self.isBoxOutOfSight(box)){
|
||||||
|
self.resetBox(box);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
self.drawBox = function(box, ctx){
|
||||||
|
ctx.fillStyle = "rgba(255,255,255,0.03)";
|
||||||
|
ctx.fillRect(box.x, box.y, box.w, box.h);
|
||||||
|
};
|
||||||
|
for(var i=0; i<40; i++){
|
||||||
|
var box = {};
|
||||||
|
self.resetBox(box, true);
|
||||||
|
self.boxes.push(box);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.draw = function(ctx){
|
||||||
|
|
||||||
|
// A big ol' black box
|
||||||
|
ctx.fillStyle = "#111111";
|
||||||
|
ctx.fillRect(0,0, BG_WIDTH, BG_HEIGHT);
|
||||||
|
|
||||||
|
// Moving white boxes
|
||||||
|
self.boxes.forEach(function(box){
|
||||||
|
self.updateBox(box);
|
||||||
|
});
|
||||||
|
self.boxes.forEach(function(box){
|
||||||
|
self.drawBox(box, ctx);
|
||||||
|
});
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -8,47 +8,74 @@ function Beebee(){
|
||||||
self.sprite = new Sprite({
|
self.sprite = new Sprite({
|
||||||
image: beebeeImage,
|
image: beebeeImage,
|
||||||
grid:{
|
grid:{
|
||||||
width: 1,
|
width: 2,
|
||||||
height: 2
|
height: 3
|
||||||
},
|
},
|
||||||
frame:{
|
frame:{
|
||||||
width: 720,
|
width: 600,
|
||||||
height: 500
|
height: 400
|
||||||
},
|
},
|
||||||
anchor:{
|
anchor:{
|
||||||
x: 300,
|
x: 425/2,
|
||||||
y: 230
|
y: 325/2
|
||||||
},
|
},
|
||||||
frameNames:[
|
frameNames:[
|
||||||
|
"normal_look_phone",
|
||||||
"normal",
|
"normal",
|
||||||
"panic",
|
"normal_speak",
|
||||||
"yay"
|
"",
|
||||||
|
"scream",
|
||||||
|
"scream_2"
|
||||||
],
|
],
|
||||||
x: 300,
|
x: 270,
|
||||||
y: 430,
|
y: 405
|
||||||
rotation: 0,
|
|
||||||
scale: 1,
|
|
||||||
squash: 1
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Draw
|
// Draw
|
||||||
var ticker = 1;
|
var ticker = 0;
|
||||||
self.draw = function(ctx){
|
self.draw = function(ctx){
|
||||||
|
|
||||||
// Bouncing based on frame!
|
var fname = self.sprite.currentFrameName;
|
||||||
ticker += 1/20;
|
|
||||||
if(self.sprite.currentFrameName == "panic"){
|
// Normal: Breathe fast!
|
||||||
ticker += 1;
|
if(fname.substr(0,6) == "normal"){
|
||||||
|
self.sprite.breatheSpeed = 0.8;
|
||||||
|
self.sprite.breatheAmp = 0.01;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scream: Loop between scream 1/2!
|
||||||
|
if(fname.substr(0,6) == "scream"){
|
||||||
|
self.sprite.breatheSpeed = 0;
|
||||||
|
self.sprite.breatheAmp = 0;
|
||||||
|
if(ticker<=0){
|
||||||
|
ticker=5;
|
||||||
|
if(fname=="scream") self.sprite.gotoFrameByName("scream_2");
|
||||||
|
if(fname=="scream_2") self.sprite.gotoFrameByName("scream");
|
||||||
|
}else{
|
||||||
|
ticker--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
self.sprite.squash = 1 + Math.sin(ticker)*0.05;
|
|
||||||
|
|
||||||
// Draw me!
|
// Draw me!
|
||||||
self.sprite.draw(ctx);
|
self.sprite.draw(ctx);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
subscribe("beebee", function(frameName){
|
// When going to frames...
|
||||||
self.sprite.gotoFrameByName(frameName);
|
subscribe("beebee", function(fname){
|
||||||
|
|
||||||
|
self.sprite.gotoFrameByName(fname);
|
||||||
|
|
||||||
|
// Bounce transition
|
||||||
|
self.sprite.bounce = 1.1;
|
||||||
|
if(fname=="scream"){
|
||||||
|
self.sprite.bounce = 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Kill
|
||||||
|
self.kill = function(){
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
|
@ -114,6 +114,9 @@ Game.executeNextLine = function(){
|
||||||
case "code":
|
case "code":
|
||||||
promiseNext = Game.executeCode(line);
|
promiseNext = Game.executeCode(line);
|
||||||
break;
|
break;
|
||||||
|
case "wait":
|
||||||
|
promiseNext = Game.executeWait(line);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If it's a goto, end THIS section immediately.
|
// If it's a goto, end THIS section immediately.
|
||||||
|
@ -251,6 +254,21 @@ Game.executeCode = function(line){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Execute wait! Just wait.
|
||||||
|
Game.executeWait = function(line){
|
||||||
|
|
||||||
|
// Get integer from (...NN)
|
||||||
|
var waitTime = parseInt(line.match(/^\(\.\.\.(\d+)\)/)[1].trim());
|
||||||
|
|
||||||
|
// Delayed promise
|
||||||
|
var promiseDelayed = new pinkySwear();
|
||||||
|
setTimeout(function(){
|
||||||
|
promiseDelayed(true, []);
|
||||||
|
}, waitTime);
|
||||||
|
return promiseDelayed;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
// Execute goto! Just goto.
|
// Execute goto! Just goto.
|
||||||
Game.executeGoto = function(line){
|
Game.executeGoto = function(line){
|
||||||
var gotoID = line.match(/^\(\#(.*)\)/)[1].trim().toLocaleLowerCase();
|
var gotoID = line.match(/^\(\#(.*)\)/)[1].trim().toLocaleLowerCase();
|
||||||
|
@ -272,6 +290,10 @@ Game.getLineType = function(line){
|
||||||
var isCode = /^\`/.test(line);
|
var isCode = /^\`/.test(line);
|
||||||
if(isCode) return "code";
|
if(isCode) return "code";
|
||||||
|
|
||||||
|
// Is it a wait?
|
||||||
|
var isWait = /^\(\.\.\.\d+\)/.test(line);
|
||||||
|
if(isWait) return "wait";
|
||||||
|
|
||||||
// Otherwise, it's text.
|
// Otherwise, it's text.
|
||||||
return "text";
|
return "text";
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ function HitPoints(){
|
||||||
self.dom = document.querySelector("#game_hp");
|
self.dom = document.querySelector("#game_hp");
|
||||||
self.canvas = document.createElement("canvas");
|
self.canvas = document.createElement("canvas");
|
||||||
self.canvas.width = 360 * 2;
|
self.canvas.width = 360 * 2;
|
||||||
self.canvas.height = 70 * 2;
|
self.canvas.height = 100 * 2;
|
||||||
self.canvas.style.width = self.canvas.width/2 + "px";
|
self.canvas.style.width = self.canvas.width/2 + "px";
|
||||||
self.canvas.style.height = self.canvas.height/2 + "px";
|
self.canvas.style.height = self.canvas.height/2 + "px";
|
||||||
self.context = self.canvas.getContext("2d");
|
self.context = self.canvas.getContext("2d");
|
||||||
|
@ -110,6 +110,10 @@ function HitPoints(){
|
||||||
ctx.save();
|
ctx.save();
|
||||||
ctx.scale(2,2);
|
ctx.scale(2,2);
|
||||||
|
|
||||||
|
// Draw BG
|
||||||
|
var sx=0, sy=600, sw=720, sh=200;
|
||||||
|
ctx.drawImage(self.image, sx,sy,sw,sh, 0,0,sw/2,sh/2);
|
||||||
|
|
||||||
// Draw Left & Right Sides
|
// Draw Left & Right Sides
|
||||||
self.drawHalf(ctx, false);
|
self.drawHalf(ctx, false);
|
||||||
self.drawHalf(ctx, true);
|
self.drawHalf(ctx, true);
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
function Hong(){
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
// Sprite!
|
||||||
|
var beebeeImage = new Image();
|
||||||
|
beebeeImage.src = "sprites/hong.png";
|
||||||
|
self.sprite = new Sprite({
|
||||||
|
image: beebeeImage,
|
||||||
|
grid:{
|
||||||
|
width: 3,
|
||||||
|
height: 2
|
||||||
|
},
|
||||||
|
frame:{
|
||||||
|
width: 300,
|
||||||
|
height: 300
|
||||||
|
},
|
||||||
|
anchor:{
|
||||||
|
x: 160/2,
|
||||||
|
y: 225/2
|
||||||
|
},
|
||||||
|
frameNames:[
|
||||||
|
"_body_1",
|
||||||
|
"_body_2",
|
||||||
|
"",
|
||||||
|
"normal",
|
||||||
|
"smile",
|
||||||
|
"shock"
|
||||||
|
],
|
||||||
|
x: 80,
|
||||||
|
y: 400
|
||||||
|
});
|
||||||
|
|
||||||
|
// Breathe normally
|
||||||
|
self.sprite.breatheSpeed = 0.017;
|
||||||
|
self.sprite.breatheAmp = 0.014;
|
||||||
|
|
||||||
|
// Bounce slow
|
||||||
|
self.sprite.bounceHookes = 0.1;
|
||||||
|
self.sprite.bounceDamp = 0.9;
|
||||||
|
|
||||||
|
// First frame
|
||||||
|
self.sprite.gotoFrameByName("smile");
|
||||||
|
|
||||||
|
// Draw
|
||||||
|
var ticker = 0;
|
||||||
|
self.draw = function(ctx){
|
||||||
|
|
||||||
|
var fname = self.sprite.currentFrameName;
|
||||||
|
|
||||||
|
// Draw body FIRST
|
||||||
|
var bod_frame = (Math.floor(ticker/30)%2 == 0) ? "_body_1" : "_body_2";
|
||||||
|
ticker++;
|
||||||
|
self.sprite.gotoFrameByName(bod_frame);
|
||||||
|
self.sprite.draw(ctx);
|
||||||
|
|
||||||
|
// Draw face next
|
||||||
|
self.sprite.gotoFrameByName(fname);
|
||||||
|
self.sprite.draw(ctx);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// When going to frames...
|
||||||
|
subscribe("hong", function(fname){
|
||||||
|
self.sprite.gotoFrameByName(fname);
|
||||||
|
self.sprite.bounce = 1.05;
|
||||||
|
if(fname=="shock"){
|
||||||
|
self.sprite.bounce = 1/1.5;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Kill
|
||||||
|
self.kill = function(){
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -10,6 +10,15 @@ SceneSetup.demo = function(){
|
||||||
|
|
||||||
Game.resetScene();
|
Game.resetScene();
|
||||||
|
|
||||||
|
// Background
|
||||||
|
var bg = new BGAnxiety();
|
||||||
|
Game.scene.children.push(bg);
|
||||||
|
|
||||||
|
// Hong
|
||||||
|
var hong = new Hong();
|
||||||
|
Game.scene.children.push(hong);
|
||||||
|
|
||||||
|
// Beebee
|
||||||
var beebee = new Beebee();
|
var beebee = new Beebee();
|
||||||
Game.scene.children.push(beebee);
|
Game.scene.children.push(beebee);
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,15 @@ function Sprite(config){
|
||||||
self.scale = config.scale || 1;
|
self.scale = config.scale || 1;
|
||||||
self.squash = config.squash || 1;
|
self.squash = config.squash || 1;
|
||||||
|
|
||||||
|
// Helpers
|
||||||
|
self.breathe = 0;
|
||||||
|
self.breatheSpeed = 0;
|
||||||
|
self.breatheAmp = 0;
|
||||||
|
self.bounce = 1;
|
||||||
|
self.bounceVel = 0;
|
||||||
|
self.bounceDamp = 0.8;
|
||||||
|
self.bounceHookes = 0.4;
|
||||||
|
|
||||||
// Draw frame!
|
// Draw frame!
|
||||||
self.draw = function(ctx){
|
self.draw = function(ctx){
|
||||||
|
|
||||||
|
@ -81,9 +90,19 @@ function Sprite(config){
|
||||||
var dy = self.y;
|
var dy = self.y;
|
||||||
ctx.translate(dx, dy);
|
ctx.translate(dx, dy);
|
||||||
|
|
||||||
|
// Breathe
|
||||||
|
self.breathe += self.breatheSpeed;
|
||||||
|
var breatheSquash = 1 + Math.sin(self.breathe)*self.breatheAmp;
|
||||||
|
|
||||||
|
// Bounce
|
||||||
|
self.bounce += self.bounceVel;
|
||||||
|
self.bounceVel -= (self.bounce-1) * self.bounceHookes;
|
||||||
|
self.bounceVel *= self.bounceDamp;
|
||||||
|
|
||||||
// Scale
|
// Scale
|
||||||
var scaleX = self.scale * self.squash;
|
var totalSquash = self.squash * breatheSquash * self.bounce;
|
||||||
var scaleY = self.scale / self.squash;
|
var scaleX = self.scale * totalSquash;
|
||||||
|
var scaleY = self.scale / totalSquash;
|
||||||
ctx.scale(scaleX, scaleY);
|
ctx.scale(scaleX, scaleY);
|
||||||
|
|
||||||
// Draw it!
|
// Draw it!
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 54 KiB |
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
BIN
sprites/hp.png
BIN
sprites/hp.png
Binary file not shown.
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 9.3 KiB |
|
@ -4,7 +4,7 @@ html,body{
|
||||||
}
|
}
|
||||||
body{
|
body{
|
||||||
margin:0;
|
margin:0;
|
||||||
background: #ddd;
|
background: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.no_select{
|
.no_select{
|
||||||
|
@ -22,7 +22,7 @@ body{
|
||||||
|
|
||||||
width: 360px;
|
width: 360px;
|
||||||
height: 600px;
|
height: 600px;
|
||||||
background: #ccc;
|
background: #2E2E2E;
|
||||||
|
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
font-family: Helvetica, Arial, sans-serif;
|
font-family: Helvetica, Arial, sans-serif;
|
||||||
|
@ -75,7 +75,24 @@ body{
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
left: 15px;
|
left: 15px;
|
||||||
transition: all 0.3s ease-in-out;
|
transition: all 0.3s ease-in-out;
|
||||||
|
|
||||||
|
/*border: 1px solid #ffffff;*/
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
.wolf-bubble:before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 50%;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border: 16px solid transparent;
|
||||||
|
border-left-color: #ffffff;
|
||||||
|
border-right: 0;
|
||||||
|
margin-top: -16px;
|
||||||
|
margin-right: -16px;
|
||||||
|
}
|
||||||
|
*/
|
||||||
.wolf-bubble:after {
|
.wolf-bubble:after {
|
||||||
content: '';
|
content: '';
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -99,16 +116,19 @@ body{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom:0;
|
bottom:0;
|
||||||
|
|
||||||
background: #666;
|
background: #2E2E2E;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
|
|
||||||
}
|
}
|
||||||
#game_choices > div{
|
#game_choices > div{
|
||||||
margin-bottom:0.5em;
|
padding: 0.25em 0;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
#game_choices > div:hover{
|
||||||
|
background: rgba(255,255,255,0.25);
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************/
|
/***********************************/
|
||||||
/***********************************/
|
/***********************************/
|
||||||
|
|
Loading…
Reference in New Issue