ç®æ¬¡
- èšäº1
- ããŒã1.ã²ãŒã ãµã€ã¯ã«
- ããŒã2.ã©ã€ãã©ãª
- ããŒã3.éšå±ãšãšãªã¢
- ããŒã4.æŒç¿
- ã»ã¯ã·ã§ã³2
- ããŒã5.ã²ãŒã ã®åºæ¬
- ããŒã6.ãã¬ãŒã€ãŒã¯ã©ã¹ã®åºæ¬
- ã»ã¯ã·ã§ã³3
- ããŒã7.ãã¬ãŒã€ãŒã®ãã©ã¡ãŒã¿ãŒãšæ»æ
- ããŒã8.æµ
- ã»ã¯ã·ã§ã³4
- ããŒã9.ãã£ã¬ã¯ã¿ãŒãšã²ãŒã ãµã€ã¯ã«
- ããŒã10.ã³ãŒãäœæã®ãã©ã¯ãã£ã¹
- ããŒã11.ååçã¹ãã«
- ã»ã¯ã·ã§ã³5
- ããŒã12.ãã®ä»ã®ååçã¹ãã«
13.ã¹ãã«ããªãŒ
14.ã³ã³ãœãŒã«
15.æçµ
ããŒã12ïŒãã®ä»ã®ååçã¹ãã«
ãã¬ãŒ
æ®ãã®æ»æãå®è£
ããããšããå§ããŸãã æåã¯ã次ã®ãããªBlastæ»æã§ãã
ã·ã§ããã¬ã³ã®ããã«ãããã€ãã®ç ²åŒŸãç°ãªãé床ã§çºå°ããããã®åŸããã«æ¶ããŸãã ãã¹ãŠã®è²ã¯
negative_colors
ããŒãã«ããååŸãããåçºå°ç©ã¯éåžžããããã¡ãŒãžãå°ãªããªããŸãã
æ»æããŒãã«ã¯æ¬¡ã®ããã«ãªããŸãã
attacks['Blast'] = {cooldown = 0.64, ammo = 6, abbreviation = 'W', color = default_color}
ãããŠãã·ã§ã«ã®äœæããã»ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
function Player:shoot() ... elseif self.attack == 'Blast' then self.ammo = self.ammo - attacks[self.attack].ammo for i = 1, 12 do local random_angle = random(-math.pi/6, math.pi/6) self.area:addGameObject('Projectile', self.x + 1.5*d*math.cos(self.r + random_angle), self.y + 1.5*d*math.sin(self.r + random_angle), table.merge({r = self.r + random_angle, attack = self.attack, v = random(500, 600)}, mods)) end camera:shake(4, 60, 0.4) end ... end
ããã§ã¯ããã¬ã€ã€ãŒã移åããæ¹åãã-30ã+30床ã®ç¯å²ã®ã©ã³ãã ãªè§åºŠã§12åã®ã·ã§ã«ãäœæããŸãã ãŸãã500ã600ã®ç¯å²ã§é床ãã©ã³ãã åããŸãïŒéåžžããã®å€ã¯200ã§ãïŒãã€ãŸããçºå°ç©ã¯éåžžã®çŽ3åéããªããŸãã
ãã ããã·ã§ã«ãããã«æ¶ããããã«ããããããããã§ã¯ç®çã®åäœãåŸãããŸããã ããã¯æ¬¡ã®ããã«å®è£
ã§ããŸãã
function Projectile:new(...) ... if self.attack == 'Blast' then self.damage = 75 self.color = table.random(negative_colors) self.timer:tween(random(0.4, 0.6), self, {v = 0}, 'linear', function() self:die() end) end ... end
ããã§3ã€ã®ããšãèµ·ãããŸãã ãŸãããã¡ãŒãžå€ã100æªæºã«èšå®ããŸããããã¯ã100 HPã§æ®éã®æµã殺ãã«ã¯ã1ã€ã§ã¯ãªã2ã€ã®ã·ã§ã«ãå¿
èŠã§ããããšãæå³ããŸãã ãã®æ»æã§ã¯12åã®ã·ã§ã«ãåæã«çºå°ããããããããã¯è«ççã§ãã 次ã«ã
negative_colors
ããŒãã«ããã©ã³ãã ã«éžæããŠãçºå°ç©ã®è²ãèšå®ããŸãã ã³ãŒãã®ãã®å Žæã§ããããå®è¡ããããšã«æ
£ããŠããŸãã æåŸã«ã0.4ã0.6ç§ã®ã©ã³ãã ãªæéã®åŸããã®çºå°äœãç Žå£ããå¿
èŠãããããšãå ±åããŸããããã«ãããæãŸããå¹æãåŸãããŸãã ããã«ãçºå°äœãç Žå£ããã ãã§ãªããèŠãç®ãå°ãè¯ããªããããé床ã0ã«äžããŸãã
ããã¯ãã¹ãŠãå¿
èŠãªåäœãäœæãããã§ã«å®äºããŠããããã§ãã ãã ããèšäºã®åã®éšåã§å€ãã®ããã·ãã¹ãã«ãè¿œå ããåŸã¯ããããã®ããã·ãã¹ãã«ã§åŸã«è¿œå ãããã¹ãŠã®ãã®ãé©åã«æ©èœããããã«æ³šæããå¿
èŠããããŸãã ããšãã°ãåã®ããŒãã®æåŸã§ã¯ãç ²åŒŸã®å¹æãè¿œå ããŸããã Blastæ»æã®åé¡ã¯ãBlastã·ã§ã«ã0.4ã0.6ç§ã§æ»ã¬ãããã·ãŒã«ãçºå°äœã®å¹æãšçµã¿åããããªãããšã§ãã
ãã®åé¡ã解決ãã1ã€ã®æ¹æ³ã¯ãå¹²æžããããã·ãã¹ãã«ïŒãã®å Žåã¯ã·ãŒã«ãïŒãåé¢ããããããã®ç¶æ³ã«ç¬èªã®ããžãã¯ãé©çšããããšã§ãã çºå°ç©ã®
shield
å€ãtrueã§ããç¶æ³ã§ã¯ãçºå°ç©ã¯ä»ã®ãã¹ãŠã«é¢ä¿ãªã6ç§éååšããã¯ãã§ãã ãããŠãä»ã®ãã¹ãŠã®ç¶æ³ã§ã¯ãæ»æã«ãã£ãŠæå®ãããæéã¯ä¿æãããŸãã ããã¯æ¬¡ã®ããã«ãªããŸãã
function Projectile:new(...) ... if self.attack == 'Blast' then self.damage = 75 self.color = table.random(negative_colors) if not self.shield then self.timer:tween(random(0.4, 0.6), self, {v = 0}, 'linear', function() self:die() end) end end if self.shield then ... self.timer:after(6, function() self:die() end) end ... end
ãã®æ±ºå®ã¯ããã¯ã®ããã«æããŸãããæ°ããååçã¹ãã«ãè¿œå ãããšåŸã
ã«è€éã«ãªããæ¡ä»¶ãè¿œå ããå¿
èŠãããããšã¯å®¹æã«æ³åã§ããŸãã ããããç§ã®çµéšãããããšããã®æ¹æ³ã¯ä»ã®èª°ãããæãç°¡åã§ãšã©ãŒãçºçãã«ããæ¹æ³ã§ãã ãã®åé¡ãå¥ã®ããäžè¬çãªæ¹æ³ã§è§£æ±ºããããšããããšãã§ããŸãããéåžžã¯æå³ããªãçµæã«ãªããŸãã ãããããã®åé¡ã«å¯Ÿããããè¯ãäžè¬çãªè§£æ±ºçããããŸãããç§ã¯å人çã«ã¯èããŠããŸããã§ãããããããèŠã€ããããªãã£ãå Žåã次ã®æè¯ã®è§£æ±ºçã¯æãåçŽãªãã®ãããªãã¡ãäœãã§ããŠäœãã§ããªããã決å®ããå€ãã®æ¡ä»¶ä»ãæ§æã«ãªããŸãã ããã§ãã£ãŠãã
if not self.shield
ã¯ãçºå°ç©ã®å¯¿åœãå€æŽããæ°ããªæ»æãè¿œå ã
if not self.shield
ãã³ã«æ¡ä»¶ã«å
è¡ããŸãã
172.ïŒCONTENTïŒååçã¹ãã«
projectile_duration_multiplier
å®è£
ããŸãã æéã«é¢é£ãããã¹ãŠã®Projectileã¯ã©ã¹ã®åäœã«äœ¿çšããããšãå¿ããªãã§ãã ããã
å転
次ã®å®è¡å¯èœãªæ»æã¯ã¹ãã³ã§ãã 次ã®ããã«ãªããŸãã
ãããã®ã·ã§ã«ã¯ãäžå®ã®å€ã§åžžã«è§åºŠãå€æŽããŸãã ãããå®çŸããã«ã¯ãè§åºŠã®å€åçã瀺ãå€æ°
rv
ãè¿œå ãããã®å€ãåãã¬ãŒã ã®
r
ã«è¿œå ããŸãã
function Projectile:new(...) ... self.rv = table.random({random(-2*math.pi, -math.pi), random(math.pi, 2*math.pi)}) end function Projectile:update(dt) ... if self.attack == 'Spin' then self.r = self.r + self.rv*dt end ... end
絶察å€ãmath.piæªæºãŸãã¯2 * math.piãè¶
ããªãããã«ããããã-2 * math.piãã-math.piãŸã§ã®ééãŸãã¯math.piãã2 * math.piãŸã§ã®ééãéžæããŸãã ã 絶察å€ãäœããšãçºå°ç©ã«ãã£ãŠäœãããåã倧ãããªãã絶察å€ã倧ãããšãåãå°ãããªãããšãæå³ããŸãã åã®ãµã€ãºããèŠãç®ãè¯ãããããã«å¿
èŠãªå€ã«å¶éããŸãã ãŸããè² ã®å€ãšæ£ã®å€ã®éãã¯ãåãå転ããæ¹åã«ããããšãç解ããå¿
èŠããããŸãã
ããã«ãSpinã·ã§ã«ãæ°žä¹
ã«ååšãããããªãã®ã§ãSpinã·ã§ã«ã«å¯¿åœãè¿œå ã§ããŸãã
function Projectile:new(...) ... if self.attack == 'Spin' then self.timer:after(random(2.4, 3.2), function() self:die() end) end end
shoot
æ©èœã¯æ¬¡ã®ããã«ãªããŸãã
function Player:shoot() ... elseif self.attack == 'Spin' then self.ammo = self.ammo - attacks[self.attack].ammo self.area:addGameObject('Projectile', self.x + 1.5*d*math.cos(self.r), self.y + 1.5*d*math.sin(self.r), table.merge({r = self.r, attack = self.attack}, mods)) end end
ãããŠãæ»æããŒãã«ã¯æ¬¡ã®ããã«ãªããŸãã
attacks['Spin'] = {cooldown = 0.32, ammo = 2, abbreviation = 'Sp', color = hp_color}
ãã®ããã«ããŠãå¿
èŠãªåäœãååŸããŸãã ãã ãããã1ã€ãã·ã§ã«ããã®ãã¬ãŒã¹ãå¿
èŠã§ãã ãã¬ã€ã€ãŒã®è¹ã«äœ¿çšããããã®ãšåããã¬ã€ã«ã䜿çšããããŒãã³ã°çºå°äœãšã¯ç°ãªãããã®çºå°äœãã¬ã€ã«ã¯çºå°äœã®åœ¢ç¶ãšè²ãç¹°ãè¿ããŸãããå®å
šã«æ¶ãããŸã§ãã£ãããšèŠããªããªããŸãã å¥ã®ãã¬ãŒã¹ãªããžã§ã¯ãã«å¯ŸããŠè¡ã£ãã®ãšåãæ¹æ³ã§ãããå®è£
ã§ããŸããããããã®éããèæ
®ããŸãã
ProjectileTrail = GameObject:extend() function ProjectileTrail:new(area, x, y, opts) ProjectileTrail.super.new(self, area, x, y, opts) self.alpha = 128 self.timer:tween(random(0.1, 0.3), self, {alpha = 0}, 'in-out-cubic', function() self.dead = true end) end function ProjectileTrail:update(dt) ProjectileTrail.super.update(self, dt) end function ProjectileTrail:draw() pushRotate(self.x, self.y, self.r) local r, g, b = unpack(self.color) love.graphics.setColor(r, g, b, self.alpha) love.graphics.setLineWidth(2) love.graphics.line(self.x - 2*self.s, self.y, self.x + 2*self.s, self.y) love.graphics.setLineWidth(1) love.graphics.setColor(255, 255, 255, 255) love.graphics.pop() end function ProjectileTrail:destroy() ProjectileTrail.super.destroy(self) end
ããã¯ããªãæšæºçãªããã«èŠããŸãããå¯äžã®é¡èãªåŽé¢ã¯
alpha
å€æ°ãæã£ãŠããããšã§ããããã¯ãã¥ã€ãŒã³ãä»ããŠ0ã«å€æŽããããããçºå°ç©ã¯0.1ãã0.3ç§ã®ã©ã³ãã ãªæéã®åŸã«ãã£ãããšæ¶ãããŸã£ããåãæ¹æ³ã§ãã¬ãŒã¹ãæç»ããŸãã·ã§ã«ã®æãæ¹ã 芪ã®çºå°ç©
s
å€æ°
r
ã
s
ããã³
color
ã䜿çšããããšãéèŠã§ããã€ãŸãããããäœæãããšããããããã¹ãŠã転éããå¿
èŠããããŸãã
function Projectile:new(...) ... if self.attack == 'Spin' then self.rv = table.random({random(-2*math.pi, -math.pi), random(math.pi, 2*math.pi)}) self.timer:after(random(2.4, 3.2), function() self:die() end) self.timer:every(0.05, function() self.area:addGameObject('ProjectileTrail', self.x, self.y, {r = Vector(self.collider:getLinearVelocity()):angle(), color = self.color, s = self.s}) end) end ... end
ãã®ããã«ããŠãå¿
èŠãªçµæãéæããŸãã
173.ïŒCONTENTïŒ Flame
æ»æãå®è£
ããŸãã æ»æããŒãã«ã¯æ¬¡ã®ããã«ãªããŸãã
attacks['Flame'] = {cooldown = 0.048, ammo = 0.4, abbreviation = 'F', color = skill_point_color}
ãããŠãæ»æèªäœã¯æ¬¡ã®ãšããã§ãã
ã·ã§ã«ã¯ã0.6ãã1ç§ã®ã©ã³ãã ãªæéééã§çåããBlastã·ã§ã«ã«äŒŒãŠããå¿
èŠãããããã®éã«é床ã0ã«å€æŽããå¿
èŠããããŸãããããã®ã·ã§ã«ããSpinã·ã§ã«ã®ããã«ProjectileTrailãªããžã§ã¯ãã䜿çšããŸãã Flameã®åã·ã§ã«ã¯ã50ãŠãããã®ãã¡ãŒãžã軜æžããŸãã
匟ãã·ã§ã«
ããŠã³ã¹ã·ã§ã«ã¯å£ã§è·³ãè¿ãå¿
èŠããããå£ã«ãã£ãŠç Žå£ãããããšã¯ãããŸããã ããã©ã«ãã§ã¯ãããŠã³ã¹ã·ã§ã«ã¯å£ã«4åè·³ãè¿ãã次ã«å£ã«ã¶ã€ãã£ããšãã«ç Žå£ãããŸãã ããã¯ã
shoot
æ©èœã®
opts
ããŒãã«ã䜿çšããŠèšå®ã§ããŸãã
function Player:shoot() ... elseif self.attack == 'Bounce' then self.ammo = self.ammo - attacks[self.attack].ammo self.area:addGameObject('Projectile', self.x + 1.5*d*math.cos(self.r), self.y + 1.5*d*math.sin(self.r), table.merge({r = self.r, attack = self.attack, bounce = 4}, mods)) end end
ãããã£ãŠã
bounce
å€æ°ã«ã¯ãçºå°ç©ã«ãã£ãŠæ®ãããããŠã³ã¹ã®æ°ãå«ãŸããŸãã å£ã«åœãããã³ã«1ãã€æžå°ããŠäœ¿çšã§ããŸãã
function Projectile:update(dt) ...
ããã§ã¯ãæ®ãã®è·³ãè¿ãã®æ°ãæžããããšã«å ããŠãåœãã£ãå£ãèæ
®ããŠçºå°äœã®æ¹åãå€æŽããŸãã ãããããã£ãšäžè¬çãªæ¹æ³ããããŸãããåå£ãšã®è¡çªãåå¥ã«èæ
®ãã解決çãèãåºãããšãã§ããŸããããã®åŸãçºå°äœã®è§åºŠãæ£ããåæ /ãã©ãŒããããã«å¿
èŠãªèšç®ãå®è¡ãããŸãã
bounce
ã0ã®å Žåãæåã®æ¡ä»¶æ§é ãã¹ããããããéåžžã®ãã¹ã«ç§»åãããããçºå°ç©ãç Žå£ãããããšã«æ³šæããŠãã ããã
setLinearVelocity
åŒã³åºãåã«ãã®è¡çªã³ãŒãããã¹ãŠé
眮ããããšãéèŠ
setLinearVelocity
ãããããªããšã1ãã¬ãŒã ã®é
延ã§çºå°ç©ãå転ããããããããŠã³ã¹ã¯æ©èœããŸããããåã«è§åºŠãå転ããŠãå
ã«æ»ããŸããã å®å
šã®ããã«ãçºå°äœã®è§åºŠãå転ãããããšã«å ããŠã
setPosition
ã䜿çšããŠãã®äœçœ®ã匷å¶ããããšãã§ããŸãããç§ã«ã¯å¿
èŠãªãããã§ãã
ããŠã³ãããçºå°ç©ã®è²ã¯ãSpreadçºå°ç©ãšåæ§ã«ã
default_colors
ããŒãã«ããååŸãããããšãé€ããŠãã©ã³ãã ã«ãªããŸãã ããã¯ã
Projectile:draw
é¢æ°ãåå¥ã«åŠçããå¿
èŠãããããšãæå³ããŸãã
function Projectile:draw() ... if self.attack == 'Bounce' then love.graphics.setColor(table.random(default_colors)) end ... end
æ»æããŒãã«ã¯æ¬¡ã®ãšããã§ãã
attacks['Bounce'] = {cooldown = 0.32, ammo = 4, abbreviation = 'Bn', color = default_color}
ããã¯ãã¹ãŠæ¬¡ã®ããã«ãªããŸãã
174.ïŒCONTENTïŒ 2Splitæ»æãå®è£
ããŸãã ããã¯æ¬¡ã®ãããªãã®ã§ãã
ããã¯Homingã·ã§ã«ã®ããã«èŠããè²
ammo_color
ã®ã¿ã䜿çšããŸãã
çºå°ç©ãæµã«åœãããšãå
ã®çºå°ç©ã®æ¹åãã+ -45床ã®è§åºŠã§2ã€ã«åå²ãããŸãïŒ2ã€ã®æ°ããçºå°ç©ãäœæãããŸãïŒã ã·ã§ã«ãå£ã«ã¶ã€ãããšãå£ããã®åå°è§ã§ïŒã€ãŸããã·ã§ã«ãäžå£ã«ã¶ã€ãããšã2ã€ã®ã·ã§ã«ãmath.pi / 4ããã³3 * math.pi / 4ã«åããŠïŒäœæãããŸããçºå°ç©ã®åå°ãããªãã¯èªåã§éžã¶ããšãã§ããŸãã ãã®æ»æã®ããŒãã«ã¯æ¬¡ã®ããã«ãªããŸãã
attacks['2Split'] = {cooldown = 0.32, ammo = 3, abbreviation = '2S', color = ammo_color}
175.ïŒCONTENTïŒ 4Splitæ»æãå®è£
ããŸãã ããã¯æ¬¡ã®ãããªãã®ã§ãã
2Splitæ»æãšåãããã«åäœããŸããã2ã€ã§ã¯ãªã4ã€ã®ã·ã§ã«ãäœæããŸãã ã·ã§ã«ã¯ãäžå¿ãã45床ã®ãã¹ãŠã®è§åºŠã§éä¿¡ãããŸããã€ãŸããmath.pi / 4ã3 * math.pi / 4ã-math.pi / 4ããã³-3 * math.pi / 4ã§ãã æ»æããŒãã«ã¯æ¬¡ã®ããã«ãªããŸãã
attacks['4Split'] = {cooldown = 0.4, ammo = 4, abbreviation = '4S', color = boost_color}
皲劻
Lightningæ»æã¯æ¬¡ã®ããã«ãªããŸãã
ãã¬ã€ã€ãŒãæµããäžå®ã®è·é¢ã«éãããšã皲劻ãäœæãããæµã«ãã¡ãŒãžãäžããŸãã ããã§ã®äœæ¥ã®ã»ãšãã©ã¯ãé·ãçºçãããããšã§ããããããŸããããæ€èšããŸãã
LightningLine
ãªããžã§ã¯ããäœæããŠå®è£
ããŸã
LightningLine
ãªããžã§ã¯ãã¯ãé·ã®é»è·ãèŠèŠçã«è¡šçŸããŸãã
LightningLine = GameObject:extend() function LightningLine:new(area, x, y, opts) LightningLine.super.new(self, area, x, y, opts) ... self:generate() end function LightningLine:update(dt) LightningLine.super.update(self, dt) end
æç»æ©èœã«çŠç¹ãåœãŠã皲劻ã®äœæã¯ããªãã«ãä»»ãããŸãïŒ
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãçææ¹æ³ã«ã€ããŠè©³ãã説æããŠãããããããã§ã¯ç¹°ãè¿ããŸããã é·ã®é»è·ãæ§æãããã¹ãŠã®è¡ã
self.lines
ããŒãã«ã«ãããåè¡ãããŒ
x1, y1, x2, y2
ãå«ãããŒãã«ã§ãããš
self.lines
ãŸãã ããã念é ã«çœ®ããŠã次ã®ãããªæãç°¡åãªæ¹æ³ã§é·ã®é»è·ãåŒãåºãããšãã§ããŸãã
function LightningLine:draw() for i, line in ipairs(self.lines) do love.graphics.line(line.x1, line.y1, line.x2, line.y2) end end
ãã ããããã¯åçŽãããŸãã ãããã£ãŠããŸããããã®ç·ãè²
boost_color
ã§ç·ã®å€ªã2.5ã§æç»ãããã®äžã«
default_color
ãšç·ã®å€ªã1.5ã§åãç·ãå床æç»ããå¿
èŠããããŸãã ããã«ããããžãããŒã®å
é»ãå°ãåããªãããžãããŒã®ããã«ãªããŸãã
function LightningLine:draw() for i, line in ipairs(self.lines) do local r, g, b = unpack(boost_color) love.graphics.setColor(r, g, b, self.alpha) love.graphics.setLineWidth(2.5) love.graphics.line(line.x1, line.y1, line.x2, line.y2) local r, g, b = unpack(default_color) love.graphics.setColor(r, g, b, self.alpha) love.graphics.setLineWidth(1.5) love.graphics.line(line.x1, line.y1, line.x2, line.y2) end love.graphics.setLineWidth(1) love.graphics.setColor(255, 255, 255, 255) end
ããã«ãããã§ã¯
alpha
å±æ§ã䜿çšããŸããããã¯æåã¯255ã§ãããã©ã€ã³ã®åç¶ââæéãã€ãŸãçŽ0.15ç§ã§ãã¥ã€ãŒã³ã«ãã£ãŠ0ã«æžå°ããŸãã
ããã§ã¯ããã®LightningLineãªããžã§ã¯ãã®äœæã«ç§»ããŸãããã ãã®æ»æã¯æ¬¡ã®ããã«åäœããŸãããã¬ã€ã€ãŒãèŠçå
ã§æµã«ååè¿ã¥ããšãæ»æãããªã¬ãŒãããæµã«ãã¡ãŒãžãäžããŸãã æåã«ãã¹ãŠã®æµããã¬ã€ã€ãŒã«è¿ã¥ããŸãããã ããã¯ãç¹å®ã®ååŸã®ã¿ãŒã²ãããæŸã£ãããŒãã³ã°çºå°äœã®å Žåãšåãæ¹æ³ã§è¡ãããšãã§ããŸãã ãã ãããã¬ãŒã€ãŒã®èåŸã«ããæµã«ãã¡ãŒãžãäžããŠã¯ãªããªããããååŸããã¬ãŒã€ãŒã®äžå¿ã«ããªãããã«ããŸãããããã£ãŠããã®åã®äžå¿ããã¬ãŒã€ãŒã®åãã®æ¹åã«åæ¹ã«ç§»åãããã®åŸã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
function Player:shoot() ... elseif self.attack == 'Lightning' then local x1, y1 = self.x + d*math.cos(self.r), self.y + d*math.sin(self.r) local cx, cy = x1 + 24*math.cos(self.r), y1 + 24*math.sin(self.r) ... end
ããã§
x1, y1
ãã€ãŸãäžè¬ã«ç ²åŒŸãçºå°ããäœçœ®ïŒè¹ã®è¹éŠïŒã決å®ãã次ã«
cx, cy
ãã€ãŸãæãè¿ãæµãèŠã€ããããã«äœ¿çšããååŸã®äžå¿ã決å®ããŸãã ãµãŒã¯ã«ã24åäœã·ããããŠããŸããããã¯ããã¬ãŒã€ãŒã®èåŸã«ããæµãéžæã§ããªãããã«ååãªå€§ããã§ãã
次ã«ã§ããããšã¯ãããŒãã³ã°ã·ã§ã«ã§ã¿ãŒã²ãããèŠã€ããããšãã«Projectileãªããžã§ã¯ãã§äœ¿çšããã³ãŒããåçŽã«ã³ããŒã¢ã³ãããŒã¹ãããŸãããããŒãºã«åãããŠå€æŽããåã®äœçœ®ãåã®äžå¿
cx, cy
ã«çœ®ãæããŸãã
function Player:shoot() ... elseif self.attack == 'Lightning' then ...
ãã®åŸããã¬ã€ã€ãŒã®24ãŠãããåã«ããåã®ååŸ64ãŠãããå
ã®æµã®ãªã¹ããååŸããŸãã ããã§ã¯ãæµãã©ã³ãã ã«éžæããããæãè¿ãã«ããããšãã§ããŸãã åŸè
ã®ãªãã·ã§ã³ã«çŠç¹ãåœãŠãŸããã€ãŸããåæµããåãŸã§ã®è·é¢ã«åºã¥ããŠããŒãã«ããœãŒãããå¿
èŠããããŸãã
function Player:shoot() ... elseif self.attack == 'Lightning' then ... table.sort(nearby_enemies, function(a, b) return distance(ax, ay, cx, cy) < distance(bx, by, cx, cy) end) local closest_enemy = nearby_enemies[1] ... end
ãã®ç®çã®ããã«ã
table.sort
ã
table.sort
ã§äœ¿çšã§ã
table.sort
ã 次ã«ããœãŒããããããŒãã«ã®æåã®èŠçŽ ãååŸããŠæ»æããã ãã§ãã
function Player:shoot() ... elseif self.attack == 'Lightning' then ...
æåã«ã
closest_enemy
ãnilã«çãããªãããšã確èªããå¿
èŠããããŸã
closest_enemy
çããå Žåã¯ãäœãããªãã§ãã ããã è¿ãã«æµãããªããããã»ãšãã©ã®å Žåã¯ãŒãã«ãªããŸãã ããã§ãªãå Žåã¯ãä»ã®ãã¹ãŠã®æ»æãšåæ§ã«åŒŸè¬ãåæžããæå·ããŠããæµã«å¯ŸããŠ
hit
é¢æ°ãåŒã³åºããŸãã ãã®åŸãå€æ°
x1, y1, x2, y2
ã§LightningLineãªããžã§ã¯ããäœæããŸããããã¯ãæµã®äžå¿ãšåæ§ã«ãé»è·ã解æŸãããè¹ã®æ£é¢ã®äœçœ®ãè¡šããŸãã æåŸã«ãæ»æãããé¢çœãããããã«ãExplodeParticleããŒãã£ã¯ã«ã®æãäœæããŸãã
æ»æãæ©èœããããã«æåŸã«å¿
èŠãªã®ã¯ãã®ããŒãã«ã§ãïŒ
attacks['Lightning'] = {cooldown = 0.2, ammo = 8, abbreviation = 'Li', color = default_color}
ããã¯ãã¹ãŠæ¬¡ã®ããã«ãªããŸãã
176.ïŒCONTENTïŒ Explode
æ»æãå®è£
ããŸãã ããã¯æ¬¡ã®ãããªãã®ã§ãã
ç¹å®ã®ååŸå
ã®ãã¹ãŠã®æµãç Žå£ããççºãäœæãããŸãã ã·ã§ã«èªäœã¯ã
hp_color
ããããã«å€§ããããšãé€ããŠãããŒãã³ã°ã·ã§ã«ã®ããã«èŠããŸãã æ»æããŒãã«ã¯æ¬¡ã®ããã«ãªããŸãã
attacks['Explode'] = {cooldown = 0.6, ammo = 4, abbreviation = 'E', color = hp_color}
177.ïŒã³ã³ãã³ãïŒ Laser
æ»æãå®è£
ããŸãã ããã¯æ¬¡ã®ãããªãã®ã§ãã
ããã暪åããã¹ãŠã®æµãç Žå£ãã巚倧ãªã©ã€ã³ãäœæãããŸãã ç·ãŸãã¯è¡çªãæ€åºããããã®å転é·æ¹åœ¢ãšããŠããã°ã©ã ã§ããŸãã ã©ã€ã³ã䜿çšããããšã«ããå Žåã¯ãäºãã«ãããã«é¢ãã3è¡ãŸãã¯5è¡ã䜿çšããããšããå§ãããŸããããããªããšããã¬ã€ã€ãŒã¯æã
æµãéããäžå
¬å¹³ã«æããŸãã
æ»æèªäœã®å¹æã¯ä»ã®äººãšã¯ç°ãªããŸãããåé¡ã¯ãªãã¯ãã§ãã 倪ãã¯ãã¥ã€ãŒã³ã§æéãšãšãã«å€åããäžå€®ã®1æ¬ã®å€§ããªçœãç·ãšãæåã¯çœãç·ã«è¿ãããå¹æãçµäºãããšæ¡å€§ããŠæ¶ãã2æ¬ã®èµ€ãç·ãåŽé¢ã«ãããŸãã å°æå¹æã¯ãå
ã®ShootEffectãªããžã§ã¯ããæ¡å€§ãããã®ã§ãèµ€è²ããããŸãã æ»æããŒãã«ã¯æ¬¡ã®ããã«ãªããŸãã
attacks['Laser'] = {cooldown = 0.8, ammo = 6, abbreviation = 'La', color = hp_color}
178.ïŒCONTENTïŒããã·ãã¹ãã«
additional_lightning_bolt
å®è£
ããŸãã åœãŠã¯ãŸãå Žåããã¬ã€ã€ãŒã¯2æ¬ã®çš²åŠ»ã§åæã«æ»æã§ããŸãã ããã°ã©ãã³ã°ã®èŠ³ç¹ããèŠããšãããã¯ãæãè¿ãæµã1ã€æ¢ã代ããã«ã2人ãæ¢ããååšããå Žåã¯äž¡æ¹ãæ»æããããšãæå³ããŸãã ãŸãã0.5ç§ãªã©ã®çãééã§åæ»æãåé¢ããããšããããšãã§ããŸãã
179.ïŒCONTENTïŒããã·ãã¹ãã«
increased_lightning_angle
ãå
ã®
è§åºŠãå®è£
ããŸãã ãã®ã¹ãã«ã¯ã皲劻æ»æãããªã¬ãŒã§ããè§åºŠãå¢å ãããŸããã€ãŸããåŽé¢ãæã«ã¯ãã¬ã€ã€ãŒã®èåŸã®æµãæ»æããŸãã ããã°ã©ãã³ã°ã®èŠ³ç¹ããã¯ã
increased_lightning_angle
ãtrueã®å Žåã皲劻åã24åäœãããããèšç®ã§ãã¬ã€ã€ãŒã®äžå¿ã䜿çšããªãããšãæå³ããŸãã
180.ïŒCONTENTïŒååçã¹ãã«
area_multiplier
å®è£
ããŸãã ãã®ã¹ãã«ã¯ããšãªã¢ã«é¢é£ãããã¹ãŠã®æ»æãšå¹æã®ãšãªã¢ãå¢å ãããŸãã ææ°ã®äŸã¯ãLightningæ»æã®çš²åŠ»åãšExplodeæ»æãšãªã¢ã§ãã
ãã ããããã¯ççºã«äžè¬çã«é©çšãããã ãã§ãªãããšãªã¢ã«é¢é£ãããã¹ãŠã®ãã®ã«ãé©çšãããŸãïŒæ
å ±ã®ååŸãŸãã¯å¹æã®é©çšã«åã䜿çšãããå ŽåïŒã181.ïŒCONTENTïŒååçã¹ãã«ãå®è£
ãlaser_width_multiplier
ãŸãããã®ã¹ãã«ã¯ãã¬ãŒã¶ãŒæ»æã®åããå¢æžããŸãã182.ïŒCONTENTïŒååçã¹ãã«ãå®è£
ãadditional_bounce_projectiles
ãŸãããã®ã¹ãã«ã¯ãããŠã³ã¹ã®çºå°ç©ã®è·³ãè¿ãã®åæ°ãå¢æžããŸããããã©ã«ãã§ã¯ãããŠã³ã¹æ»æã·ã§ã«ã¯4åããŠã³ã¹ã§ããŸããadditional_bounce_projectiles
4ã«çããå ŽåãããŠã³ã¹æ»æã·ã§ã«ã¯8åããŠã³ã¹ã§ããŸãã183.ïŒCONTENTïŒååçã¹ãã«ãå®è£
ããfixed_spin_attack_direction
ãããŒã«ã®ãããªãã®ã¹ãã«ã¯ããã¹ãŠã®ã¹ãã³æ»æã·ã§ã«ãäžå®ã®æ¹åã«å転ãããŸããã€ãŸãããããã¯ãã¹ãŠå·ŠãŸãã¯å³ã«ã®ã¿å転ããŸãã184.ïŒCONTENTïŒååçã¹ãã«ãå®è£
ãsplit_projectiles_split_chance
ãŸããããã¯ããã§ã«æ»æã«ãã£ãŠåå²ããã2SplitãŸãã¯4Splitã®çºå°ç©ã«ãã£ãŠåã³åå²ããã確çãè¿œå ããçºå°ç©ã§ããããšãã°ããã®ç¢ºçã100ã«çãããªããšãåå²ãããã·ã§ã«ã¯åžžã«ååž°çã«åå²ãããŸãïŒãã ããã¹ãã«ããªãŒã§ã¯ãããèš±å¯ããŸããïŒã185.ïŒã³ã³ãã³ãïŒååçã¹ãã«ãå®è£
[attack]_spawn_chance_multiplier
ãã[attack]
åæ»æã®ååã§ãããããã®ã¹ãã«ã¯ãç¹å®ã®æ»æã®å¯èœæ§ãé«ããŸããããã§ãæ»æãªãœãŒã¹ãäœæãããšãæ»æãã©ã³ãã ã«éžæãããŸãããã ããä»ã§ã¯ãã£ã³ã¹ãªã¹ãããããããéžæããå¿
èŠããããŸããæåã¯ãã¹ãŠã®æ»æã«å¯ŸããŠåçã®ç¢ºçãæã¡[attack]_spawn_chance_multiplier
ãŸãããããã·ãã¹ãã«ã«ãã£ãŠå€åããŸãã186ïŒã³ã³ãã³ãïŒããã·ãã¹ãã«ãå®è£
ãstart_with_[attack]
ãã©ã[attack]
-åæ»æã®ååããããã®ååçã¹ãã«ã«ããããã¬ãŒã€ãŒã¯é©åãªæ»æã§ã²ãŒã ãéå§ã§ããŸããããšãã°ãstart_with_bounce
trueã®å Žåããã¬ãŒã€ãŒã¯åã©ãŠã³ããããŠã³ã¹æ»æã§éå§ããŸããè€æ°ã®ååçã¹ãã«ã®å€ãtrueã®å Žåstart_with_[attack]
ããã®ãã¡ã®1ã€ãã©ã³ãã ã«éžæãããŸããè¿œå ã®ããŒãã³ã°ã·ã§ã«
Passive Skill additional_homing_projectiles
ã¯ããHoming Projectile Launchããªã©ã®ããã·ãã¹ãã«ã«è¿œå ã®çºå°ç©ãè¿œå ããŸããéåžžãèµ·åãããããŒãã³ã°ã·ã§ã«ã¯æ¬¡ã®ããã«ãªããŸãã function Player:onAmmoPickup() if self.chances.launch_homing_projectile_on_ammo_pickup_chance:next() then local d = 1.2*self.w self.area:addGameObject('Projectile', self.x + d*math.cos(self.r), self.y + d*math.sin(self.r), {r = self.r, attack = 'Homing'}) self.area:addGameObject('InfoText', self.x, self.y, {text = 'Homing Projectile!'}) end end
additional_homing_projectiles
è¿œå ã®ã·ã§ã«ãããã€äœ¿çšããå¿
èŠããããã瀺ãæ°å€ã§ãããããæ©èœããããã«ã¯ãåæ§ã®ããšãã§ããŸãïŒ function Player:onAmmoPickup() if self.chances.launch_homing_projectile_on_ammo_pickup_chance:next() then local d = 1.2*self.w for i = 1, 1+self.additional_homing_projectiles do self.area:addGameObject('Projectile', self.x + d*math.cos(self.r), self.y + d*math.sin(self.r), {r = self.r, attack = 'Homing'}) end self.area:addGameObject('InfoText', self.x, self.y, {text = 'Homing Projectile!'}) end end
ãããŠãlaunch_homing_projectile
ããããã¿ã€ãã®ååçã¹ãã«ãçŸããåã€ã³ã¹ã¿ã³ã¹ã«ãããé©çšããã ãã§ãã187.ïŒCONTENTïŒååçã¹ãã«ãå®è£
ãadditional_barrage_projectiles
ãŸãã188.ïŒCONTENTïŒååçã¹ãã«ãå®è£
ãbarrage_nova
ãŸããããã¯ããŒã«å€æ°ã§ãããèšå®ããããšããã¬ãŒã€ãŒã®ç§»åæ¹åã§ã¯ãªããã©ã€ã³ã®ã·ã§ã«ãå圢ã«çºå°ãããããã«ããŸããããã¯æ¬¡ã®ãããªãã®ã§ãã
ãã€ã³ã·ã§ã«
æ©é·åŒŸã¯ããã®äœæå Žæã«ãšã©ãŸããæéã®çµéãšãšãã«ççºãã匟è¬ã§ãã ããã¯æ¬¡ã®ãããªãã®ã§ãã
ã芧ã®ãšãããã¹ãã³æ»æã®çºå°äœã®ããã«å転ããŸãããã¯ããã«é«éã§ãããããå®è£
ããmine
ããã«ãçºå°ç©ã®å±æ§ã®å€ãtrueã§ããå Žåãã¹ãã³ã·ã§ã«ã®ããã«åäœããŸãããå転é床ã¯å¢å ããŸãã function Projectile:new(...) ... if self.mine then self.rv = table.random({random(-12*math.pi, -10*math.pi), random(10*math.pi, 12*math.pi)}) self.timer:after(random(8, 12), function()
ããã§ã¯ãmath.piãã2 * math.piã®çµ¶å¯Ÿå€ã®ç¯å²ã§å転é床ãå¶éãã代ããã«ã10 * math.piãã12 * math.piã®çµ¶å¯Ÿå€ãåããŸãããã®çµæãçºå°äœã¯ã¯ããã«éãå転ããããå°ããªé åãã«ããŒããŸããããã¯ããã®ã¿ã€ãã®åäœã«æé©ã§ããããã«ã8ã12ç§ã®ã©ã³ãã ãªæéã®åŸãçºå°äœãççºããŸãããã®ççºã¯ãççºã·ã§ã«çšã«åŠçãããççºãšåãæ¹æ³ã§åŠçããå¿
èŠã¯ãããŸãããç§ã®å Žåããªããžã§ã¯ããäœæããŸãããExplosion
ããã®ã¢ã¯ã·ã§ã³ãå®è£
ããæ¹æ³ã¯ãããããããŸãã Explodeæ»æãæŒç¿ã§ãã£ããããæŒç¿ã®ãŸãŸã«ããŸãã189.ïŒã³ã³ãã³ãïŒååçã¹ãã«ãå®è£
ããdrop_mines_chance
ã0.5ç§ããšã«ã©ãŠã³ããã€ã³ãé¢ãã確çããã¬ã€ã€ãŒã«è¿œå ããŸããããã°ã©ãã³ã°ã®èŠ³ç¹ããã¯ãããã¯0.5ç§ããšã«éå§ãããã¿ã€ããŒãä»ããŠå®è£
ãããŸãããããã®åå®è¡ã§ãé¢æ°cubesãããŒã«ããŸãdrop_mines_chance:next()
ã190.ïŒCONTENTïŒprojectiles_explode_on_expiration
ã·ã§ã«ã寿åœã®ããã«ç Žå£ããããšãã«ççºããããšãå¯èœã«ããããã·ãã¹ãã«ãå®è£
ããŸããããã¯ã圌ãã®äººçãçµããæéã«ã®ã¿é©çšãããã¹ãã§ããçºå°ç©ãæµãŸãã¯å£ãšè¡çªããå Žåããã®ã¹ãã«ãçã§ãããšãã«ççºããªãã¯ãã§ãã191.ïŒCONTENTïŒååçã¹ãã«ãå®è£
ãself_explode_on_cycle_chance
ãŸãããã®ã¹ãã«ã¯ããã¬ã€ã€ãŒã«åãµã€ã¯ã«ã§èªåã®åšãã«ççºãåŒãèµ·ããæ©äŒãäžããŸãã次ã®ããã«ãªããŸããExplodeæ»æãšåãççºã䜿çšããŸããäœæããççºã®æ°ãå Žæãããã³ãµã€ãºã¯ãèªåã§éžæã§ããŸãã192.ïŒCONTENTïŒååçã¹ãã«ãå®è£
ãprojectiles_explosions
ãŸãããããåœãŠã¯ãŸãå Žåããã¬ã€ã€ãŒã«ãã£ãŠäœæãããçºå°ç©ããçºçãããã¹ãŠã®ççºã¯ãããã·ãã¹ãã«ã«äŒŒãè€æ°ã®ã·ã§ã«ãäœæããŸãbarrage_nova
ãäœæãããçºå°ç©ã®æ°ã¯æå5ã€ã§ããã®éã¯ååçãªã¹ãã«ã®åœ±é¿ãåãadditional_barrage_projectiles
ãŸãããšãã«ã®ãŒã·ãŒã«ã
ããã·ãã¹ãã«energy_shield
ãçã§ããå Žåããã¬ã€ã€ãŒã®HPã¯ãšãã«ã®ãŒã·ãŒã«ãã«å€ãããŸãïŒä»¥éESãšåŒã°ããŸãïŒãESã®ããã©ãŒãã³ã¹ã¯ã次ã®ç¹ã§HPã®ããã©ãŒãã³ã¹ãšç°ãªããŸãã- ãã¬ã€ã€ãŒã¯äºéã®ãã¡ãŒãžãåãã
- ãã¬ãŒã€ãŒESã¯ããã¡ãŒãžãåããªãå Žåãäžå®æéåŸã«ãªãã£ãŒãžããŸã
- ãã¬ã€ã€ãŒã®äžæ»èº«æéã¯ååã§ã
äž»ã«é¢æ°ã§ããããã¹ãŠãå®è£
ã§ããŸãhit
ïŒ function Player:new(...) ...
ãããåŸã«ESã®ãªããŒããéå§ããåã®äžæåæ¢ã¯2ç§ã§ããããªããŒãé床ã¯1ç§ããã4 ESïŒã³ãŒã«ã§0.25ç§ã«1åevery
ïŒã§ãããšçºè¡šããŸãããŸãããããé¢æ°ã®äžéšã«æ¡ä»¶æ§é ãé
眮ãããã¡ãŒãžå€æ°ã2åã«ããŸããããã¯ããã¬ãŒã€ãŒã«ãã¡ãŒãžãäžããããã«ä»¥äžã§äœ¿çšãããŸããããã§ç§ãã¡ã«æ®ãããå¯äžã®ããšã¯ãäžæ»èº«ã®æéãååã«ããããšã§ãããããé¢æ°ãŸãã¯é¢æ°ã®ããããã§ãããè¡ãããšãã§ããŸãsetStats
ããã®æ©èœãé·ãéæ±ã£ãŠããªãããã2çªç®ã®ãªãã·ã§ã³ãéžæããŸãã function Player:setStats() ... if self.energy_shield then self.invulnerability_time_multiplier = self.invulnerability_time_multiplier/2 end end
以æ¥setStats
ãã®åŸãã³ã³ã¹ãã©ã¯ã¿é¢æ°ã®æåŸã®åŒã³åºããšåŒã³åºãtreeToPlayer
ïŒãããã¯æšã®ãã¹ãŠã®ããã·ãã¹ãã«ãããŒãããåŸã«åŒã³åºãããŠããïŒãç§ãã¡ã¯äŸ¡å€ãããããšã確èªããããšãã§ããŸãenergy_shield
ã¹ãã«ãåæ ããŠãããªãŒå
ã®ãã¬ã€ã€ãŒãéžæããŠãã ãããããã«ãããªãŒãããã®ä¹æ°ã®ãã¹ãŠã®å¢å /æžå°ãé©çšããåŸã確å®ã«äžæ»èº«ã¿ã€ããŒãæžããããšãã§ããŸããããã§ã¯é åºãéèŠã§ã¯ãªããããããã¯å®éã«ã¯ãã®ååçã¹ãã«ã«ã¯å¿
èŠãããŸããããä»ã®ã¹ãã«ã«ã¯éèŠãªå ŽåãããsetStats
ãŸããéåžžããã©ã¡ãŒã¿ã®ç¢ºçãããŒã«å€æ°ããååŸããããã®å€åãã²ãŒã å
ã§äžå®ã§ããå Žåããããã«å
¥ããæ¹ãè«ççsetStats
ã§ãã193.ïŒã³ã³ãã³ãïŒ HP UIãå€æŽããŠããã€energy_shield
æ¬åœãããã¯ãã®ããã«èŠããŸããïŒ194.ïŒã³ã³ãã³ãïŒenergy_shield_recharge_amount_multiplier
1ç§ãããã«åŸ©å
ãããESã®æ°ãå¢æžããããã·ãã¹ãã«ãå®è£
ããŸãã195.ïŒCONTENTïŒenergy_shield_recharge_cooldown_multiplier
ãã¬ãŒã€ãŒã«ãã¡ãŒãžãäžããåŸãäžæåæ¢æéãå¢æžããããã·ãã¹ãã«ãå®è£
ããŸãããã®åŸãESããªãã£ãŒãžãéå§ããŸãããã¹ãŠã®ãã«ã€ãã³ãã«ä¿¡é Œæ§ãè¿œå ãã
ããšãã°ãadded_chance_to_all_on_kill_events
5ã«çããå Žåããkillãã¿ã€ãã®ãã¹ãŠã®ããã·ãã¹ãã«ã®ç¢ºçã¯5ïŒ
å¢å ããŸããããã¯ããã¬ã€ã€ãŒãæåã«åèšlaunch_homing_projectile_on_kill_chance
8 ã«å¢å ããã¹ãã«ãç²åŸããå Žåã8ïŒ
ã§ã¯ãªãæçµç¢ºçã13ïŒ
ã«ãªãããšãæå³ããŸããããã¯ããŸãã«ã匷åãªååçã¹ãã«ã§ãããå®è£
ã®èŠ³ç¹ããæ€èšããããšã¯èå³æ·±ãã§ããé¢æ°generateChances
ãªã¹ããchanceListãçæããæ¹æ³ãå€æŽããããšã§å®è£
ã§ããŸãããã®é¢æ°ã¯ãååãã§çµãããã¹ãŠã®ããã·ãã¹ãã«ããã€ãã¹ãããã_chance
ãååã«å«ãŸãããã¹ãŠã®ããã·ãã¹ãã«ã解æã§ããããšã¯æããã§ã_on_kill
ãã€ãŸãããããå®è¡ããåŸadded_chance_to_all_on_kill_events
ãçæããã»ã¹ã®é©åãªå Žæã«chanceListãè¿œå ããã ãã§ååã§ãããŸããã¿ã€ãã«ã«ããã¹ãã«ãšéåžžã®ããã·ãã¹ãã«ãåããŸãon_kill
ã function Player:generateChances() self.chances = {} for k, v in pairs(self) do if k:find('_chance') and type(v) == 'number' then if k:find('_on_kill') and v > 0 then else self.chances[k] = chanceList({true, math.ceil(v)}, {false, 100-math.ceil(v)}) end end end end
ããã·ãã¹ãã«ã®æ€çŽ¢ã«äœ¿çšããã®ãšåãæ¹æ³ã䜿çšããŸãã_chance
ãã®è¡ãã«çœ®ãæããŠãã ãã_on_kill
ãããã«ããã®ååçã¹ãã«ã0ïŒ
ãè¶
ããã€ãã³ããçæãã確çãããããšã確èªããå¿
èŠããããŸãããã¬ã€ã€ãŒããã®ã€ãã³ãã«ãã€ã³ããè²»ãããŠããªããšããæ°ããããã·ãã¹ãã«ãã殺ããããšãããªã©ã®ãã¹ãŠã®ã€ãã³ãã«ãã®ç¢ºçãè¿œå ããããªãã®ã§ããã¬ã€ã€ãŒããã§ã«ããçšåºŠã®ç¢ºçãæè³ããã€ãã³ãã«å¯ŸããŠã®ã¿ãããè¡ããŸããããã§chanceListãäœæã§ããŸãããv
èªåã§äœ¿çšãã代ããã«ã次ã®ããã«äœ¿çšããŸãv+added_chance_to_all_on_kill_events
ã function Player:generateChances() self.chances = {} for k, v in pairs(self) do if k:find('_chance') and type(v) == 'number' then if k:find('_on_kill') and v > 0 then self.chances[k] = chanceList( {true, math.ceil(v+self.added_chance_to_all_on_kill_events)}, {false, 100-math.ceil(v+self.added_chance_to_all_on_kill_events)}) else self.chances[k] = chanceList({true, math.ceil(v)}, {false, 100-math.ceil(v)}) end end end end
匟è¬ãè¿œå ããŠASPDãå¢å
ãã®ã¹ãã«ã¯ããããã©ã¡ãŒã¿ãŒã®äžéšãå¥ã®ãã©ã¡ãŒã¿ãŒã«å€æããããšã§ãããã®å Žåã匟è¬ãªãœãŒã¹ã®ãã¹ãŠã®å¢å ãååŸããè¿œå ã®æ»æé床ãšããŠè¿œå ããŸãã次ã®åŒã§ãããå®è£
ã§ããŸãã local ammo_increases = self.max_ammo - 100 local ammo_to_aspd = 30 aspd_multiplier:increase((ammo_to_aspd/100)*ammo_increases)
ããšãã°ãæ倧åèéã130匟è¬ã§ammo_to_aspd
ãå€æçã30ïŒ
ã®å ŽåãçµæãšããŠæ»æé床ã0.3 * 30 = 9ïŒ
å¢å ããŸããæ倧匟è¬ã250匟ã®å Žåãåãã³ã³ããŒãžã§ã³çã§ã1.5 * 30 = 45ïŒ
ã«ãªããŸãããããå®è£
ããã«ã¯ãæåã«å±æ§ãå®çŸ©ããŸãã function Player:new(...) ...
ãããŠãå€æ°ã«å€æãé©çšã§ããŸãaspd_multiplier
ããã®å€æ°ã¯ãªã®ã§Stat
ãé¢æ°ã§ãããè¡ãå¿
èŠããããŸãupdate
ããã®å€æ°ãæ®éã§ããã°ãé¢æ°ã§ãããè¡ããŸãsetStats
ã function Player:update(dt) ...
ãããŠãããã¯æå³ãããšããã«æ©èœããã¯ãã§ããæåŸã®ååçã¹ãã«
çŽ20ã®ååçã¹ãã«ãå®çŸããã ãã§ãããããã®ã»ãšãã©ã¯éåžžã«ç°¡åãªã®ã§ãæŒç¿ã«ä»»ããŸããå®éããããã¯ä»¥åã«å®è£
ããã»ãšãã©ã®ã¹ãã«ãšã¯ã»ãšãã©å®å
šã«ç¡é¢ä¿ã§ãããããäºçŽ°ãªããšãããããŸããããå®éã«äœãèµ·ãã£ãŠããã®ããã©ã®ããã«ç解ããŠããã®ãã確èªã§ããã¿ã¹ã¯ãšèããããšãã§ããŸãã³ãŒãããŒã¹ã§ã196.ïŒCONTENTïŒchange_attack_periodically
ãã¬ã€ã€ãŒã®æ»æã10ç§ããšã«å€æŽããããã·ãã¹ãã«ãå®è£
ããŸããæ°ããæ»æãã©ã³ãã ã«éžæãããŸãã197.ïŒCONTENTïŒgain_sp_on_death
æ»åŸã®ãã¬ã€ã€ãŒã«20 SPãäžããããã·ãã¹ãã«ãå®è£
ããŸãã198.ïŒã³ã³ãã³ãïŒååçã¹ãã«ãå®è£
ããconvert_hp_to_sp_if_hp_full
ããã¬ãŒã€ãŒã«HPãªãœãŒã¹ãååŸãããã³ã«3 SPãæäŸããŸãããã¬ãŒã€ãŒã®HPã¯ãã§ã«æ倧ã«ãªã£ãŠããŸãã199.ïŒCONTENTïŒmvspd_to_aspd
æ»æé床ã«ç§»åé床ã®å¢å ãè¿œå ããããã·ãã¹ãã«ãå®è£
ããŸãããã®å¢å ã¯ãã«äœ¿çšããããã®ãšåãåŒã䜿çšããŠè¿œå ããå¿
èŠããããŸãammo_to_aspd
ãã€ãŸãããã¬ãŒã€ãŒã®MVSPDã30ïŒ
å¢å ãã30ã«mvspd_to_aspd
çããïŒã€ãŸããå€æä¿æ°ã30ïŒ
ã§ããïŒå ŽåãASPDã¯9ïŒ
å¢å ããŸãã200.ïŒCONTENTïŒmvspd_to_hp
ãã¬ã€ã€ãŒã®HPã®é床ãäœäžãããããã·ãã¹ãã«ãå®è£
ããŸããããšãã°ãMVSPDã30ïŒ
åæžããmvspd_to_hp
ããã30ã«çããå ŽåïŒã€ãŸããå€æä¿æ°ã¯30ïŒ
ïŒã21 HPãè¿œå ããå¿
èŠããããŸãã201.ïŒã³ã³ãã³ãïŒmvspd_to_pspd
çºå°äœã®é床ã«é床ã®å¢å ãè¿œå ããååçãªã¹ãã«ãå®è£
ããŸãããŸã£ããåãããã«åäœãmvspd_to_aspd
ãŸãã202.ïŒCONTENTïŒno_boost
ãã¬ã€ã€ãŒã®ããŒã¹ãã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãç¡å¹ã«ããããã·ãã¹ãã«ãå®è£
ããŸãïŒmax_boost = 0ïŒã203.ïŒCONTENTïŒhalf_ammo
ãã¬ã€ã€ãŒã®åŒŸè¬ãååã«ããããã·ãã¹ãã«ãå®è£
ããŸãã204.ïŒã³ã³ãã³ãïŒhalf_hp
ãã¬ã€ã€ãŒã®HPãååã«ããããã·ãã¹ãã«ãå®è£
ããŸãã205.ïŒã³ã³ãã³ãïŒdeals_damage_while_invulnerable
ãã¬ã€ã€ãŒãäžæ»èº«ã®å ŽåïŒããšãã°ããããåŸã«å±æ§invincible
ãtrue ã«èšå®ãããå ŽåïŒãæ¥è§Šæã«æµã«ãã¡ãŒãžãäžããããšãã§ããããã·ãã¹ãã«ãå®è£
ããŸãã206.ïŒã³ã³ãã³ãïŒrefill_ammo_if_hp_full
ãã¬ãŒã€ãŒããã«HPã¹ã±ãŒã«ã®HPãªãœãŒã¹ãéžæããå Žåããã¬ãŒã€ãŒã®åŒŸè¬ãå®å
šã«åŸ©å
ããããã·ãã¹ãã«ãå®è£
ããŸãã207.ïŒã³ã³ãã³ãïŒrefill_boost_if_hp_full
ãã¬ã€ã€ãŒããã«HPã§HPãªãœãŒã¹ãéžæãããšãã«ããã¬ã€ã€ãŒã®ããŒã¹ããå®å
šã«åŸ©å
ããããã·ãã¹ãã«ãå®è£
ããŸãã208.ïŒã³ã³ãã³ãïŒonly_spawn_boost
Boostãäœæããå¯äžã®ãªãœãŒã¹ã«ããããã·ãã¹ãã«ãå®è£
ããŸãã209.ïŒCONTENTïŒonly_spawn_attack
äžå®ã®æéå
ã«æ»æ以å€ã®ãªãœãŒã¹ãäœæãããªãããã«ããååçãªã¹ãã«ãå®è£
ããŸããã€ãŸãããã¹ãŠã®æ»æã¯ããªãœãŒã¹ã®äžæåæ¢ãšæ»æã®äžæåæ¢ïŒã€ãŸãã16ç§ããšãããã³30ç§ããšïŒã®åŸã«äœæãããŸãã210.ïŒã³ã³ãã³ãïŒno_ammo_drop
匟è¬ãæµããèœã¡ãªãååçãªã¹ãã«ãå®è£
ããŸãã211.ïŒã³ã³ãã³ãïŒinfinite_ammo
ãã¬ã€ã€ãŒã®æ»æã匟è¬ãæ¶è²»ããªãããã·ãã¹ãã«ãå®è£
ããŸãããããŠãããã§ç§ãã¡ã¯ååçãªã¹ãã«ã§çµãããŸãããããã®ã¹ãã«ã®å€ãã¯åãªããã©ã¡ãŒã¿ãŒã®å€æŽã§ããã1ç®æã«éäžããã®ã§ã¯ãªãããªãŒå
šäœã«åæ£ã§ãããããåèšã§çŽ150ã®ç°ãªãããã·ãã¹ãã«ãæ€èšããŸããããããã®ã¹ãã«ã¯ã¹ãã«ããªãŒã§çŽ900ããŒãã«æ¡åŒµãããŸããããããããªãŒïŒèšäºã®æ¬¡ã®éšåã§èª¬æããŸãïŒã«é²ãåã«ãã³ã³ãã³ããå°ãæ¡åŒµãããã¹ãŠã®ãã¬ã€ã€ãŒã®è¹ãšãã¹ãŠã®æµãèªèããããšãã§ããŸããããªãã¯ç§ã®äŸã«å®å
šã«åŸããªããããããŸãããç§ã¯ãããæŒç¿ã§è¡ããããªãèªèº«ã®è¹/æµãäœããŸããæµ
212.ïŒCONTENTïŒæµãå®çŸãBigRock
ãŸãããã®æµã¯Rock
æ»åŸã«4ã€ã®ãªããžã§ã¯ãã«ããã«åå²ãããã®ãšãŸã£ããåãããã«æ¯ãèããŸãRock
ãããã©ã«ãã§ã¯ãHPã¯300ã§ãã213.ïŒCONTENTïŒæµãå®çŸãWaver
ãŸãããã®æµã¯æ³¢ã®çºå°äœã®ããã«æ¯ãèããæã
ååŸã«ç ²åŒŸãçºå°ããŸãïŒããã¯æ»æã®ããã«ïŒãããã©ã«ãã§ã¯ã70 HPã§ãã214.ïŒCONTENTïŒæµãå®çŸãSeeker
ãŸãããã®æµã¯åŒŸè¬ãªããžã§ã¯ãã®ããã«åäœãããã£ãããšãã¬ã€ã€ãŒã«åãã£ãŠç§»åããŸããå®æçã«ããã®æµã¯å°é·ãšåãããã«å°é·ã眮ããŸããããã©ã«ãã§ã¯ã200 HPã§ãã215.ïŒCONTENTïŒæµãå®è¡ãOrbitter
ãŸãããã®æµã¯ããã¯ãããã°ããã¯ã®ããã«æ¯ãèããŸããã圌ã®åšãã«ã¯è²æ®»ã®çŸããããŸãããããã®ã·ã§ã«ã¯ãåã®èšäºã§å®è£
ããã·ãŒã«ãã·ã§ã«ã®ããã«åäœããŸããOrbitterãã·ã§ã«ã®æ»ã®åã«æ»ãã å Žåãæ®ãã®ã·ã§ã«ã¯çæéãã¬ã€ã€ãŒã«åããããŸããããã©ã«ãã§ã¯ã450 HPã§ããè¹
ãã¥ãŒããªã¢ã«ã®åã®éšåã®ããããã§ããã¹ãŠã®è¹ã®ã°ã©ãã£ãã¯ãæ¢ã«æ€èšããŸãããããã¯æŒç¿ã§ãå®è£
ãããŸããããã®ããããã§ã«ååãäœæããŠããããšãããã³ååããã®ä»ãã¹ãŠã®ãã®ãããããšãåæãšããŠããŸãã次ã®æŒç¿ã§ã¯ãäœæãããã®ã䜿çšããŸãããèšäºã®åã®éšåãšçŸåšã®éšåã§äœ¿çšãããŠããã»ãšãã©ã®ããã·ãã¹ãã«ãå®è£
ããŠããããã奜ã¿ã«åãããŠç¬èªã®è¹ãäœæã§ããŸããç§èªèº«ãçºæãããã®ã®äŸãæããŸãã216.ïŒã³ã³ãã³ãïŒè¹ã®å®è£
Crusader
ïŒæ¬¡ã®ãªãã·ã§ã³ããããŸãã- ããŒã¹ã= 80
- ããŒã¹ãå¹çä¿æ°= 2
- é床ä¿æ°= 0.6
- å転çã®ä¹æ°= 0.5
- æ»æé床ã®ä¹æ°= 0.66
- çºå°é床ã®ä¹æ°= 1.5
- HP = 150
- ãµã€ãºä¿æ°= 1.5
217.ïŒCONTENTïŒè¹ãå®è£
ãRogue
ãŸãïŒæ¬¡ã®ãªãã·ã§ã³ããããŸãã- ããŒã¹ã= 120
- ã¯ãŒã«ããŠã³ããŒã¹ãä¹æ°= 1.5
- é床ä¿æ°= 1.3
- 匟è¬= 120
- æ»æé床ã®ä¹æ°= 1.25
- HP = 80
- è匱æ§ä¹æ°= 0.5
- ãµã€ãºä¿æ°= 0.9
218.ïŒCONTENTïŒè¹ãå®è£
ãBit Hunter
ãŸãïŒæ¬¡ã®ãªãã·ã§ã³ããããŸãã- é床ä¿æ°ä¹æ°= 0.9
- ã¿ãŒã³ã¬ãŒãä¹æ°= 0.9
- 匟è¬= 80
- æ»æé床ã®ä¹æ°= 0.8
- ã·ã§ã«é床ä¹æ°= 0.9
- è匱æ§ä¹æ°= 1.5
- ãµã€ãºä¿æ°= 1.1
- 幞éä¹æ°= 1.5
- ãªãœãŒã¹äœæé »åºŠä¹æ°= 1.5
- æµã®äœæé »åºŠã®ä¹æ°= 1.5
- ãµã€ã¯ã«é床ä¹æ°= 1.25
219.ïŒCONTENTïŒè¹ãå®è£
ãSentinel
ãŸãïŒæ¬¡ã®ãªãã·ã§ã³ããããŸãã- ãšãã«ã®ãŒã·ãŒã«ã= true
220.ïŒã³ã³ãã³ãïŒè¹ãå®è£
ããStriker
ïŒæ¬¡ã®ãªãã·ã§ã³ããããŸãã- 匟è¬= 120
- æ»æé床ã®ä¹æ°= 2
- ã·ã§ã«é床ä¹æ°= 1.25
- HP = 50
- è¿œå ã®çºå°ã·ã§ã«= 8
- ãã«ã§ããŒã¹ããçºå°ãããã£ã³ã¹= 10ïŒ
- ãµã€ã¯ã«ã§ããŒã¹ããçºçããã確ç= 10ïŒ
- 匟å¹æ°æ= true
221.ïŒã³ã³ãã³ãïŒè¹ã®å®è£
Nuclear
ïŒæ¬¡ã®ãªãã·ã§ã³ããããŸãã- ããŒã¹ã= 80
- å転çã®ä¹æ°= 0.8
- 匟è¬= 80
- æ»æé床ã®ä¹æ°= 0.85
- HP = 80
- è匱æ§ä¹æ°= 2
- 幞éä¹æ°= 1.5
- ãªãœãŒã¹äœæé »åºŠä¹æ°= 1.5
- æµã®äœæé »åºŠã®ä¹æ°= 1.5
- ãµã€ã¯ã«é床ä¹æ°= 1.5
- ãµã€ã¯ã«äžã«ãã¬ã€ã€ãŒãççºãã確ç= 10ïŒ
222.ïŒã³ã³ãã³ãïŒè¹ã®å®è£
Cycler
ïŒæ¬¡ã®ãªãã·ã§ã³ããããŸãã- ãµã€ã¯ã«é床ä¹æ°= 2
223.ïŒCONTENTïŒè¹ãå®è£
ãWisp
ãŸãã次ã®ãªãã·ã§ã³ããããŸãã- ããŒã¹ã= 50
- é床ä¿æ°= 0.5
- å転çã®ä¹æ°= 0.5
- æ»æé床ã®ä¹æ°= 0.66
- ã·ã§ã«é床ä¹æ°= 0.5
- HP = 50
- ãµã€ãºä¿æ°= 0.75
- ãªãœãŒã¹äœæé »åºŠä¹æ°= 1.5
- æµã®äœæé »åºŠã®ä¹æ°= 1.5
- çºå°ç©ã·ãŒã«ãã®ãã£ã³ã¹= 100ïŒ
- çºå°äœã©ã€ããã¡ã¯ã¿ãŒ= 1.5
çµäº
ãããŠãããã§ã²ãŒã ã®ãã¹ãŠã®ã³ã³ãã³ãã®å®è£
ãå®äºããŸãããèšäºã®æåŸã®2éšã§ã¯ãäž»ã«æåã§ã³ã³ãã³ããè¿œå ããããšã«é¢é£ããå€ãã®æŒç¿ããããŸãããããã¯äžéšã®äººã«ãšã£ãŠéåžžã«éå±ã«æãããããããªãã®ã§ããã®äœæ¥ã¯ãã®ãããªã³ã³ãã³ãã®å®è£
ã奜ããã©ããã®è¯ãææšã§ããã²ãŒã ã®éçºã®å€§éšåã¯ãåçŽã«ãã®ãããªèŠçŽ ãè¿œå ããããšã§ãããã®ããããŸã£ããæ°ã«å
¥ããªãå Žåã¯ãåŸãããæ©ãèŠã€ããæ¹ãè¯ãã§ãããã次ã®ããŒãã§ã¯ããã¬ãŒã€ãŒãããããã¹ãŠã®ååçã¹ãã«ã衚瀺ããã¹ãã«ããªãŒãèŠãŠãããŸããã¹ãã«ããªãŒãæ©èœããããã«å¿
èŠãªãã¹ãŠã®äœæã«çŠç¹ãåœãŠãŸãããããªãŒèªäœã®äœæïŒããšãã°ãããŒãã®é
眮ãšæ¥ç¶ïŒã¯å®å
šã«ã¿ã¹ã¯ã®ãŸãŸã§ããããã¯ãã²ãŒã ã«ã³ã³ãã³ããæåã§è¿œå ããã ãã§ãç¹ã«è€éãªããšã¯äœãããªãç¬éã®1ã€ã§ãã
ãã®äžé£ã®ãã¥ãŒããªã¢ã«ãã楜ãã¿ããã ããå Žåã¯ãä»åŸåæ§ã®ããšãæžããŠãã ãããitch.ioã®ãã¥ãŒããªã¢ã«ã賌å
¥ãããšãã²ãŒã ã®å®å
šãªãœãŒã¹ã³ãŒããããŒã1ãã9ã®æŒç¿ãžã®åçããã¥ãŒããªã¢ã«ã®äžéšã«åå²ãããã³ãŒãïŒã³ãŒãã¯åããŒãã®çµããã«èŠããã¯ãã§ãïŒããã³ããŒã«ã¢ã¯ã»ã¹ã§ããŸãã Steamäžã®ã²ãŒã ã