diff --git a/Card.js b/Card.js
index cb3f6aa..c2bd81d 100644
--- a/Card.js
+++ b/Card.js
@@ -95,6 +95,9 @@ function Card (game,player,zone,pid,side) {
 		this.sideB = info.sideB? new Card(game,player,zone,info.sideB,this) : null;
 	}
 
+	// Lostorage
+	this.rise = info.rise;
+
 	// 杂项
 	this.effectFilters     = [];
 	this.registeredEffects = [];
@@ -106,7 +109,8 @@ function Card (game,player,zone,pid,side) {
 	// 时点
 	this.onMove            = new Timming(game);
 	this.onEnterField      = new Timming(game);
-	this.onLeaveField      = new Timming(game);
+	this.onLeaveField      = new Timming(game); // 常时效果中「离场时」的时点
+	this.onLeaveField2     = new Timming(game); // 包括被 rise 等而成为卡垫的时点
 	this.onBurst           = new Timming(game);
 	this.onAttack          = new Timming(game);
 	this.onStartUp         = new Timming(game);
@@ -179,7 +183,7 @@ Card.prototype.cookEffect = function (rawEffect,type,offset) {
 };
 
 Card.prototype.setupConstEffects = function () {
-	this.constEffects.forEach(function (eff) {
+	this.constEffects.forEach(function (eff,idx) {
 		var createTimming,destroyTimming,once;
 		if (eff.duringGame) {
 			createTimming = null;
@@ -191,9 +195,20 @@ Card.prototype.setupConstEffects = function () {
 			once = eff.once;
 		} else {
 			createTimming = this.onEnterField;
-			destroyTimming = this.onLeaveField;
+			destroyTimming = this.onLeaveField2;
 			once = false;
 		}
+		var action = eff.action
+		if (eff.auto) {
+			action = function (set,add) {
+				var effect = this.game.newEffect({
+					source: this,
+					description: this.cid+'-'+'const-'+idx,
+					actionAsyn: eff.actionAsyn,
+				});
+				add(this,eff.auto,effect);
+			};
+		}
 		this.game.addConstEffect({
 			source: this,
 			createTimming: createTimming,
@@ -202,7 +217,7 @@ Card.prototype.setupConstEffects = function () {
 			cross: !!eff.cross,
 			fixed: !!eff.fixed,
 			condition: eff.condition,
-			action: eff.action
+			action: action,
 		},true);
 	},this);
 };
@@ -312,6 +327,14 @@ Card.prototype.canSummon = function () {
 Card.prototype.canSummonWith = function (signis) {
 	// 类型
 	if (this.type !== 'SIGNI') return false;
+	// rise
+	var riseTargets = []
+	if (this.rise) {
+		riseTargets = signis.filter(function (signi) {
+			return this.rise(signi)
+		},this)
+		if (!riseTargets.length) return false;
+	}
 	// <绿罗植 世界树>
 	if (this.player.canNotUseColorlessSigni) {
 		if (this.hasColor('colorless')) {
@@ -328,16 +351,24 @@ Card.prototype.canSummonWith = function (signis) {
 	// 等级限制
 	if (this.level > this.player.lrig.level) return false;
 	// SIGNI 数量限制
-	if (signis.length >= this.player.getSigniAmountLimit()) {
+	var length = signis.length;
+	if (this.rise) length--;
+	if (length >= this.player.getSigniAmountLimit()) {
 		return false;
 	}
 	// 界限限制
 	var totalLevel = signis.reduce(function (total,signi) {
 		return total + signi.level;
 	},this.level);
+	if (this.rise) {
+		// rise 减去等级最高的目标即可
+		totalLevel -= Math.max.apply(Math,riseTargets.map(function (signi) {
+			return signi.level;
+		}));
+	}
 	if (totalLevel > this.player.lrig.limit) return false;
 	// 召唤区限制
-	var zones = this.player.getSummonZones(signis);
+	var zones = this.player.getSummonZones(signis,this.rise);
 	if (!zones.length) return false;
 	// 结束
 	return true;
@@ -750,6 +781,8 @@ Card.prototype.moveTo = function (zone,arg) {
 	var leaveFieldEvent = null;
 	var lrigChangeEvent = null;
 	var charm = null;
+
+	/* 处理离开区域逻辑 */
 	if (card.zone.name === 'HandZone') {
 		// 离开手牌
 		removeFromArr(card,card.player.hands);
@@ -757,6 +790,7 @@ Card.prototype.moveTo = function (zone,arg) {
 		// 离开 SigniZone
 		if (inArr(card,card.player.signis)) {
 			// 是 SIGNI
+			// 以下代码 rise 里复用了,虽然说 DRY 原则,但这里也不太好抽离,养肥了再抽吧(
 			leaveFieldEvent = moveEvent;
 			card.frozen = false;
 			card.fieldData = {};
@@ -774,15 +808,36 @@ Card.prototype.moveTo = function (zone,arg) {
 			}
 		}
 	}
+
+	/* 处理进入区域逻辑 */
 	if (zone.name === 'HandZone') {
 		// 进入手牌
 		zone.player.hands.push(card);
 	} else if (zone.name === 'SigniZone') {
 		if (card.zone.name !== 'SigniZone' || zone.player !== card.player) {
+			// 进入 SIGNI 区
 			if (zone.getActualCards().length) {
-				// 放置到 SIGNI 下面的卡
+				// rise
+				if (card.rise) {
+					// 被 rise 的卡“离场”
+					signi = zone.getActualCards()[0];
+					removeFromArr(signi,signi.player.signis);
+					signi.frozen = false;
+					signi.fieldData = {};
+					signi.fieldTurnData = {};
+					charm = signi.charm;
+					signi.charm = null;
+					signi.onLeaveField2.trigger({});
+					// 出场
+					arg.bottom = false;
+					enterFieldEvent = moveEvent;
+					card.player.signis.push(card);
+				} else {
+					// 放置到 SIGNI 下面的卡
+					// (目前不用处理)
+				}
 			} else {
-				// 进入 SigniZone
+				// 出场
 				enterFieldEvent = moveEvent;
 				zone.player.signis.push(card);
 			}
@@ -882,6 +937,7 @@ Card.prototype.moveTo = function (zone,arg) {
 	} else if (leaveFieldEvent) {
 		// card.player.onSignisChange.trigger();
 		card.onLeaveField.trigger(leaveFieldEvent);
+		card.onLeaveField2.trigger(leaveFieldEvent);
 		card.player.onSigniLeaveField.trigger(leaveFieldEvent);
 		// SIGNI 离场时,下面的卡送入废弃区,
 		// 此处理在块结束时执行。
@@ -896,7 +952,7 @@ Card.prototype.moveTo = function (zone,arg) {
 	} else if (lrigChangeEvent) {
 		// card.player.onLrigChange.trigger(lrigChangeEvent);
 		var oldLrig = lrigChangeEvent.oldLrig;
-		if (oldLrig) oldLrig.onLeaveField.trigger();
+		if (oldLrig) oldLrig.onLeaveField2.trigger();
 		card.onEnterField.trigger(enterFieldEvent);
 		if (!(arg.dontTriggerStartUp || card.player.lrigStartUpBanned)) {
 			card.onStartUp.trigger(enterFieldEvent);
@@ -1280,10 +1336,7 @@ Card.prototype.banishAsyn = function (arg) {
 // };
 
 Card.prototype.summonAsyn = function (optional,dontTriggerStartUp,down) {
-	var zones = this.player.signiZones.filter(function (zone) {
-		return (zone.getActualCards().length === 0);
-	},this);
-	if (!this.canSummon() || !zones.length) return Callback.immediately();
+	if (!this.canSummon()) return Callback.immediately();
 	return Callback.immediately().callback(this,function () {
 		if (optional) {
 			return this.player.selectOptionalAsyn('SUMMON_SIGNI',[this]);
diff --git a/CardInfo.js b/CardInfo.js
index c47fd72..c7c221f 100644
--- a/CardInfo.js
+++ b/CardInfo.js
@@ -58445,7 +58445,7 @@ var CardInfo = {
 				this.player.signis.forEach(function (signi) {
 					this.game.addConstEffect({
 						source: signi,
-						destroyTimming: [signi.onLeaveField,this.game.phase.onTurnEnd],
+						destroyTimming: [signi.onLeaveField2,this.game.phase.onTurnEnd],
 						condition: function () {
 							var opposingSigni = this.getOpposingSigni();
 							if (!opposingSigni) return false;
@@ -124590,7 +124590,7 @@ var CardInfo = {
 			"【起】《ターン1回》《赤》《赤》《赤》:ターン終了時まで、あなたの《ライズアイコン》を持つシグニ1体は「このシグニが正面にあるシグニ1体をバニッシュしたとき、このシグニをアップする。」を得る。"
 		],
 		actionEffectTexts_zh_CN: [
-			"【起】《1回合1次》【红】【红】【红】:直到回合结束为止,你的1只持有【※】的SIGNI获得「这只SIGNI对面的SIGNI被驱逐时,将这只SIGNI竖置」。"
+			"【起】《1回合1次》【红】【红】【红】:直到回合结束为止,你的1只持有【Rise】的SIGNI获得「这只SIGNI对面的SIGNI被驱逐时,将这只SIGNI竖置」。"
 		],
 		actionEffectTexts_en: [
 			"[Action] [1/Turn] [Red] [Red] [Red]: Until end of turn, 1 of your SIGNI with Rise gets \"When the SIGNI in front of this SIGNI is banished, up this SIGNI.\"."
@@ -124600,7 +124600,7 @@ var CardInfo = {
 			costRed: 3,
 			actionAsyn: function () {
 				var filter = function (card) {
-					return card.hasBurst();
+					return card.rise;
 				}
 				return this.player.selectSelfSigniAsyn(filter).callback(this,function (card) {
 					if (!card) return;
@@ -125548,7 +125548,51 @@ var CardInfo = {
 			"Banish 1 of your <Valor> SIGNI with Rise. If you do, banish 1 of your opponent's SIGNI with power 12000 or less.",
 		],
 		spellEffect: [{
-			// TODO...
+			getTargets: function () {
+				return this.player.signis.filter(function (signi) {
+					return !signi.rise && signi.hasClass('武勇');
+				},this);
+			},
+			actionAsyn: function (card) {
+				return card.banishAsyn().callback(this,function (succ) {
+					if (!succ) return;
+					var filter = function (card) {
+						return card.rise && card.hasClass('武勇');
+					};
+					return this.player.seekAsyn(filter,1);
+				});
+			}
+		},{
+			getTargetAdvancedAsyn: function () {
+				var targets = [];
+				var pSignis = this.player.signis.filter(function (signi) {
+					return signi.rise && signi.hasClass('武勇');
+				});
+				var oSignis = this.player.opponent.signis.filter(function (signi) {
+					return signi.power <= 12000;
+				},this);
+				return this.player.selectTargetOptionalAsyn(pSignis).callback(this,function (targetA) {
+					if (!targetA) return;
+					targets.push(targetA);
+					return this.player.selectTargetAsyn(oSignis).callback(this,function (targetB) {
+						if (!targetB) return;
+						targets.push(targetB);
+					});
+				}).callback(this,function () {
+					return targets;
+				});
+			},
+			actionAsyn: function (targets) {
+				var targetA = targets[0];
+				var targetB = targets[1];
+				if (!inArr(targetA,this.player.signis)) return;
+				return targetA.banishAsyn().callback(this,function (succ) {
+					if (!succ) return;
+					if (!inArr(targetB,this.player.opponent.signis)) return;
+					if (targetB.power > 12000) return;
+					return targetB.banishAsyn();
+				});
+			}
 		}],
 	},
 	"2018": {
diff --git a/Player.js b/Player.js
index 2af3711..55e7d31 100644
--- a/Player.js
+++ b/Player.js
@@ -28,6 +28,7 @@ function Player (game,io,mainDeck,lrigDeck) {
 	                    // 然后在调用堆栈的最后将整个队列发送.
 	this.messagePacks = []; // 用于保存录像.
 	this.rebuildCount = 0;
+	this.coin         = 0;
 
 	// 快捷方式
 	this.hands    = [];   // 手牌
@@ -404,7 +405,7 @@ Player.prototype.summonSigniAsyn = function () {
 		return Callback.never();
 	}
 	return this.selectAsyn('SUMMON_SIGNI',cards).callback(this,function (card) {
-		return this.selectSummonZoneAsyn(true).callback(this,function (zone) {
+		return this.selectSummonZoneAsyn(true,card.rise).callback(this,function (zone) {
 			if (!zone) return;
 			return this.game.blockAsyn(this,function () {
 				card.moveTo(zone);
@@ -459,8 +460,8 @@ Player.prototype.summonResonaAsyn = function (card) {
 	});
 };
 
-Player.prototype.selectSummonZoneAsyn = function (optional) {
-	var zones = this.getSummonZones();
+Player.prototype.selectSummonZoneAsyn = function (optional,rise) {
+	var zones = this.getSummonZones(null,rise);
 	if (!zones.length) {
 		debugger;
 		return Callback.immediately(null);
@@ -469,13 +470,17 @@ Player.prototype.selectSummonZoneAsyn = function (optional) {
 	return this.selectAsyn('SUMMON_SIGNI_ZONE',zones);
 };
 
-Player.prototype.getSummonZones = function (signis) {
+Player.prototype.getSummonZones = function (signis,rise) {
 	if (!signis) signis = this.signis;
 	var forcedZones = [];
 	var zones = this.signiZones.filter(function (zone,idx) {
 		if (zone.disabled) return false;
 		var signi = zone.getActualCards()[0];
-		if (signi && inArr(signi,signis)) return false;
+		if (rise) {
+			if (!signi || !rise(signi)) return false;
+		} else {
+			if (signi && inArr(signi,signis)) return false;
+		}
 		var opposingSigni = this.opponent.signiZones[2-idx].getActualCards()[0];
 		if (opposingSigni && opposingSigni.forceSummonZone) {
 			forcedZones.push(zone);
@@ -1385,7 +1390,7 @@ Player.prototype.needEner = function (obj) {
 	if (obj.costChange) {
 		obj = obj.costChange();
 	}
-	var costs = [obj.costColorless,obj.costWhite,obj.costBlack,obj.costRed,obj.costBlue,obj.costGreen];
+	var costs = [obj.costColorless,obj.costWhite,obj.costBlack,obj.costRed,obj.costBlue,obj.costGreen,costCoin];
 	return costs.some(function (cost) {
 		return cost > 0;
 	});
@@ -1665,6 +1670,7 @@ Player.prototype.enoughCost = function (obj) {
 	if (obj.costChange) {
 		obj = obj.costChange();
 	}
+	if (obj.costCoin && obj.costCoin >= this.coin) return false;
 	if (!this.enoughEner(obj)) return false;
 	if (obj.costDown && obj.source && !obj.source.isUp) return false;
 	if (obj.costCondition && obj.source) {
@@ -1821,6 +1827,11 @@ Player.prototype.payCostAsyn = function (obj,cancelable) {
 				if (obj.costDown && obj.source) {
 					obj.source.down();
 				}
+				// Coin
+				if (obj.costCoin) {
+					this.coin -= obj.costCoin
+					if (this.coin < 0) this.coin = 0
+				}
 				// 其它
 				if (obj.costAsyn) {
 					if (obj.source) return obj.costAsyn.call(obj.source);
@@ -2203,6 +2214,13 @@ Player.prototype.setCrossPair = function () {
 	pair.crossed = [card,pair];
 };
 
+Player.prototype.gainCoins = function(count) {
+	this.coin += count;
+	if (this.coin > 5) {
+		this.coin = 5;
+	}
+};
+
 
 // For test:
 Player.prototype.matchCard = function (arg) {