begin adding shield slime enemy variant
This commit is contained in:
@@ -517,6 +517,9 @@ struct
|
|||||||
EnemyPatch.withPatches (enemy, patches)
|
EnemyPatch.withPatches (enemy, patches)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
fun updateShieldSlime
|
||||||
|
(player, enemy, walls, wallTree, platforms, platformTree) = enemy
|
||||||
|
|
||||||
fun updateEnemyState
|
fun updateEnemyState
|
||||||
(enemy, walls, wallTree, platforms, platformTree, player, graph) =
|
(enemy, walls, wallTree, platforms, platformTree, player, graph) =
|
||||||
case #variant enemy of
|
case #variant enemy of
|
||||||
@@ -527,4 +530,7 @@ struct
|
|||||||
updateFollowState
|
updateFollowState
|
||||||
(player, enemy, walls, wallTree, platforms, platformTree, graph)
|
(player, enemy, walls, wallTree, platforms, platformTree, graph)
|
||||||
| STRAIGHT_BAT => updateStraightBat (player, enemy, walls, wallTree)
|
| STRAIGHT_BAT => updateStraightBat (player, enemy, walls, wallTree)
|
||||||
|
| SHIELD_SLIME =>
|
||||||
|
updateShieldSlime
|
||||||
|
(player, enemy, walls, wallTree, platforms, platformTree)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ sig
|
|||||||
| W_BAT_MIN_Y of int
|
| W_BAT_MIN_Y of int
|
||||||
| W_BAT_DIR_Y of EnemyType.bat_dir_y
|
| W_BAT_DIR_Y of EnemyType.bat_dir_y
|
||||||
| W_FACING of EntityType.facing
|
| W_FACING of EntityType.facing
|
||||||
|
| W_SHIELD_ON of bool
|
||||||
|
|
||||||
val withPatch: EnemyType.enemy * enemy_patch -> EnemyType.enemy
|
val withPatch: EnemyType.enemy * enemy_patch -> EnemyType.enemy
|
||||||
|
|
||||||
@@ -34,6 +35,7 @@ struct
|
|||||||
| W_BAT_MIN_Y of int
|
| W_BAT_MIN_Y of int
|
||||||
| W_BAT_DIR_Y of EnemyType.bat_dir_y
|
| W_BAT_DIR_Y of EnemyType.bat_dir_y
|
||||||
| W_FACING of EntityType.facing
|
| W_FACING of EntityType.facing
|
||||||
|
| W_SHIELD_ON of bool
|
||||||
|
|
||||||
fun mkEnemy
|
fun mkEnemy
|
||||||
( id
|
( id
|
||||||
@@ -50,6 +52,7 @@ struct
|
|||||||
, batMaxY
|
, batMaxY
|
||||||
, batMinY
|
, batMinY
|
||||||
, facing
|
, facing
|
||||||
|
, shieldOn
|
||||||
) =
|
) =
|
||||||
{ id = id
|
{ id = id
|
||||||
, health = health
|
, health = health
|
||||||
@@ -65,6 +68,7 @@ struct
|
|||||||
, batMaxY = batMaxY
|
, batMaxY = batMaxY
|
||||||
, batMinY = batMinY
|
, batMinY = batMinY
|
||||||
, facing = facing
|
, facing = facing
|
||||||
|
, shieldOn = shieldOn
|
||||||
}
|
}
|
||||||
|
|
||||||
fun withPatch (enemy, patch) =
|
fun withPatch (enemy, patch) =
|
||||||
@@ -84,6 +88,7 @@ struct
|
|||||||
, batMaxY
|
, batMaxY
|
||||||
, batMinY
|
, batMinY
|
||||||
, facing
|
, facing
|
||||||
|
, shieldOn
|
||||||
} = enemy
|
} = enemy
|
||||||
in
|
in
|
||||||
case patch of
|
case patch of
|
||||||
@@ -103,6 +108,7 @@ struct
|
|||||||
, batMaxY
|
, batMaxY
|
||||||
, batMinY
|
, batMinY
|
||||||
, facing
|
, facing
|
||||||
|
, shieldOn
|
||||||
)
|
)
|
||||||
| W_X x =>
|
| W_X x =>
|
||||||
mkEnemy
|
mkEnemy
|
||||||
@@ -120,6 +126,7 @@ struct
|
|||||||
, batMaxY
|
, batMaxY
|
||||||
, batMinY
|
, batMinY
|
||||||
, facing
|
, facing
|
||||||
|
, shieldOn
|
||||||
)
|
)
|
||||||
| W_X_AXIS xAxis =>
|
| W_X_AXIS xAxis =>
|
||||||
mkEnemy
|
mkEnemy
|
||||||
@@ -137,6 +144,7 @@ struct
|
|||||||
, batMaxY
|
, batMaxY
|
||||||
, batMinY
|
, batMinY
|
||||||
, facing
|
, facing
|
||||||
|
, shieldOn
|
||||||
)
|
)
|
||||||
| W_Y y =>
|
| W_Y y =>
|
||||||
mkEnemy
|
mkEnemy
|
||||||
@@ -154,6 +162,7 @@ struct
|
|||||||
, batMaxY
|
, batMaxY
|
||||||
, batMinY
|
, batMinY
|
||||||
, facing
|
, facing
|
||||||
|
, shieldOn
|
||||||
)
|
)
|
||||||
| W_Y_AXIS yAxis =>
|
| W_Y_AXIS yAxis =>
|
||||||
mkEnemy
|
mkEnemy
|
||||||
@@ -171,6 +180,7 @@ struct
|
|||||||
, batMaxY
|
, batMaxY
|
||||||
, batMinY
|
, batMinY
|
||||||
, facing
|
, facing
|
||||||
|
, shieldOn
|
||||||
)
|
)
|
||||||
| W_PLAT_ID platID =>
|
| W_PLAT_ID platID =>
|
||||||
mkEnemy
|
mkEnemy
|
||||||
@@ -188,6 +198,7 @@ struct
|
|||||||
, batMaxY
|
, batMaxY
|
||||||
, batMinY
|
, batMinY
|
||||||
, facing
|
, facing
|
||||||
|
, shieldOn
|
||||||
)
|
)
|
||||||
| W_NEXT_PLAT_ID nextPlatID =>
|
| W_NEXT_PLAT_ID nextPlatID =>
|
||||||
mkEnemy
|
mkEnemy
|
||||||
@@ -205,6 +216,7 @@ struct
|
|||||||
, batMaxY
|
, batMaxY
|
||||||
, batMinY
|
, batMinY
|
||||||
, facing
|
, facing
|
||||||
|
, shieldOn
|
||||||
)
|
)
|
||||||
| W_BAT_REST batRest =>
|
| W_BAT_REST batRest =>
|
||||||
mkEnemy
|
mkEnemy
|
||||||
@@ -222,6 +234,7 @@ struct
|
|||||||
, batMaxY
|
, batMaxY
|
||||||
, batMinY
|
, batMinY
|
||||||
, facing
|
, facing
|
||||||
|
, shieldOn
|
||||||
)
|
)
|
||||||
| W_BAT_MAX_Y batMaxY =>
|
| W_BAT_MAX_Y batMaxY =>
|
||||||
mkEnemy
|
mkEnemy
|
||||||
@@ -239,6 +252,7 @@ struct
|
|||||||
, batMaxY
|
, batMaxY
|
||||||
, batMinY
|
, batMinY
|
||||||
, facing
|
, facing
|
||||||
|
, shieldOn
|
||||||
)
|
)
|
||||||
| W_BAT_MIN_Y batMinY =>
|
| W_BAT_MIN_Y batMinY =>
|
||||||
mkEnemy
|
mkEnemy
|
||||||
@@ -256,6 +270,7 @@ struct
|
|||||||
, batMaxY
|
, batMaxY
|
||||||
, batMinY
|
, batMinY
|
||||||
, facing
|
, facing
|
||||||
|
, shieldOn
|
||||||
)
|
)
|
||||||
| W_BAT_DIR_Y batDirY =>
|
| W_BAT_DIR_Y batDirY =>
|
||||||
mkEnemy
|
mkEnemy
|
||||||
@@ -273,6 +288,7 @@ struct
|
|||||||
, batMaxY
|
, batMaxY
|
||||||
, batMinY
|
, batMinY
|
||||||
, facing
|
, facing
|
||||||
|
, shieldOn
|
||||||
)
|
)
|
||||||
| W_FACING facing =>
|
| W_FACING facing =>
|
||||||
mkEnemy
|
mkEnemy
|
||||||
@@ -290,6 +306,25 @@ struct
|
|||||||
, batMaxY
|
, batMaxY
|
||||||
, batMinY
|
, batMinY
|
||||||
, facing
|
, facing
|
||||||
|
, shieldOn
|
||||||
|
)
|
||||||
|
| W_SHIELD_ON shieldOn =>
|
||||||
|
mkEnemy
|
||||||
|
( id
|
||||||
|
, health
|
||||||
|
, x
|
||||||
|
, y
|
||||||
|
, xAxis
|
||||||
|
, yAxis
|
||||||
|
, variant
|
||||||
|
, platID
|
||||||
|
, nextPlatID
|
||||||
|
, batRest
|
||||||
|
, batDirY
|
||||||
|
, batMaxY
|
||||||
|
, batMinY
|
||||||
|
, facing
|
||||||
|
, shieldOn
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
signature ENEMY_TYPE =
|
signature ENEMY_TYPE =
|
||||||
sig
|
sig
|
||||||
datatype variant = PATROL_SLIME | FOLLOW_SLIME | STRAIGHT_BAT
|
datatype variant = PATROL_SLIME | FOLLOW_SLIME | STRAIGHT_BAT | SHIELD_SLIME
|
||||||
|
|
||||||
datatype bat_dir_y = UP | DOWN
|
datatype bat_dir_y = UP | DOWN
|
||||||
|
|
||||||
@@ -19,6 +19,7 @@ sig
|
|||||||
, batMaxY: int
|
, batMaxY: int
|
||||||
, batMinY: int
|
, batMinY: int
|
||||||
, facing: EntityType.facing
|
, facing: EntityType.facing
|
||||||
|
, shieldOn: bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type falling_enemy = {x: int, y: int, variant: variant}
|
type falling_enemy = {x: int, y: int, variant: variant}
|
||||||
@@ -29,7 +30,7 @@ end
|
|||||||
|
|
||||||
structure EnemyType: ENEMY_TYPE =
|
structure EnemyType: ENEMY_TYPE =
|
||||||
struct
|
struct
|
||||||
datatype variant = PATROL_SLIME | FOLLOW_SLIME | STRAIGHT_BAT
|
datatype variant = PATROL_SLIME | FOLLOW_SLIME | STRAIGHT_BAT | SHIELD_SLIME
|
||||||
|
|
||||||
datatype bat_dir_y = UP | DOWN
|
datatype bat_dir_y = UP | DOWN
|
||||||
|
|
||||||
@@ -48,6 +49,7 @@ struct
|
|||||||
, batMaxY: int
|
, batMaxY: int
|
||||||
, batMinY: int
|
, batMinY: int
|
||||||
, facing: EntityType.facing
|
, facing: EntityType.facing
|
||||||
|
, shieldOn: bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type falling_enemy = {x: int, y: int, variant: variant}
|
type falling_enemy = {x: int, y: int, variant: variant}
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ struct
|
|||||||
PATROL_SLIME => (0.5, 0.5, 1.0)
|
PATROL_SLIME => (0.5, 0.5, 1.0)
|
||||||
| FOLLOW_SLIME => (1.0, 0.5, 0.5)
|
| FOLLOW_SLIME => (1.0, 0.5, 0.5)
|
||||||
| STRAIGHT_BAT => (0.55, 0.55, 0.55)
|
| STRAIGHT_BAT => (0.55, 0.55, 0.55)
|
||||||
|
| SHIELD_SLIME => (0.33, 0.33, 0.11)
|
||||||
in
|
in
|
||||||
if wratio < hratio then
|
if wratio < hratio then
|
||||||
let
|
let
|
||||||
|
|||||||
@@ -110,6 +110,7 @@ struct
|
|||||||
, batMaxY = 485
|
, batMaxY = 485
|
||||||
, batMinY = 625
|
, batMinY = 625
|
||||||
, facing = EntityType.FACING_RIGHT
|
, facing = EntityType.FACING_RIGHT
|
||||||
|
, shieldOn = false
|
||||||
}
|
}
|
||||||
val enemy2 =
|
val enemy2 =
|
||||||
{ id = 2
|
{ id = 2
|
||||||
@@ -118,7 +119,7 @@ struct
|
|||||||
, health = 1
|
, health = 1
|
||||||
, xAxis = EntityType.MOVE_RIGHT
|
, xAxis = EntityType.MOVE_RIGHT
|
||||||
, yAxis = EntityType.FALLING
|
, yAxis = EntityType.FALLING
|
||||||
, variant = EnemyType.PATROL_SLIME
|
, variant = EnemyType.SHIELD_SLIME
|
||||||
, batDirY = EnemyType.UP
|
, batDirY = EnemyType.UP
|
||||||
, platID = ~1
|
, platID = ~1
|
||||||
, nextPlatID = ~1
|
, nextPlatID = ~1
|
||||||
@@ -126,6 +127,7 @@ struct
|
|||||||
, batMaxY = 485
|
, batMaxY = 485
|
||||||
, batMinY = 625
|
, batMinY = 625
|
||||||
, facing = EntityType.FACING_RIGHT
|
, facing = EntityType.FACING_RIGHT
|
||||||
|
, shieldOn = false
|
||||||
}
|
}
|
||||||
val enemies = enemyMapFromList ([enemy1, enemy2], EnemyMap.empty)
|
val enemies = enemyMapFromList ([enemy1, enemy2], EnemyMap.empty)
|
||||||
val graph = Graph.fromPlatforms (platforms, platformTree)
|
val graph = Graph.fromPlatforms (platforms, platformTree)
|
||||||
|
|||||||
@@ -17,11 +17,17 @@ struct
|
|||||||
(defeatedList, enemyMap)
|
(defeatedList, enemyMap)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
fun shieldSlimeAttacked (enemyID, enemy, enemyMap, defeatedList) =
|
||||||
|
if #shieldOn enemy then (defeatedList, enemyMap)
|
||||||
|
else defeatEnemy (enemyID, enemyMap, defeatedList)
|
||||||
|
|
||||||
fun onPlayerAttack (enemyID, enemy, enemyMap, defeatedList) =
|
fun onPlayerAttack (enemyID, enemy, enemyMap, defeatedList) =
|
||||||
case #variant enemy of
|
case #variant enemy of
|
||||||
PATROL_SLIME => defeatEnemy (enemyID, enemyMap, defeatedList)
|
PATROL_SLIME => defeatEnemy (enemyID, enemyMap, defeatedList)
|
||||||
| FOLLOW_SLIME => defeatEnemy (enemyID, enemyMap, defeatedList)
|
| FOLLOW_SLIME => defeatEnemy (enemyID, enemyMap, defeatedList)
|
||||||
| STRAIGHT_BAT => defeatEnemy (enemyID, enemyMap, defeatedList)
|
| STRAIGHT_BAT => defeatEnemy (enemyID, enemyMap, defeatedList)
|
||||||
|
| SHIELD_SLIME =>
|
||||||
|
shieldSlimeAttacked (enemyID, enemy, enemyMap, defeatedList)
|
||||||
|
|
||||||
fun fold (enemyID, (), (defeatedList, enemyMap)) =
|
fun fold (enemyID, (), (defeatedList, enemyMap)) =
|
||||||
case EnemyMap.get (enemyID, enemyMap) of
|
case EnemyMap.get (enemyID, enemyMap) of
|
||||||
@@ -105,11 +111,17 @@ struct
|
|||||||
(fallingMap, enemyMap)
|
(fallingMap, enemyMap)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
fun onShieldSlimeAttacked (enemyID, enemy, enemyMap, fallingMap) =
|
||||||
|
if #shieldOn enemy then (fallingMap, enemyMap)
|
||||||
|
else onDefeated (enemyID, enemy, enemyMap, fallingMap)
|
||||||
|
|
||||||
fun onProjectileAttack (enemyID, enemy, enemyMap, fallingMap) =
|
fun onProjectileAttack (enemyID, enemy, enemyMap, fallingMap) =
|
||||||
case #variant enemy of
|
case #variant enemy of
|
||||||
PATROL_SLIME => onDefeated (enemyID, enemy, enemyMap, fallingMap)
|
PATROL_SLIME => onDefeated (enemyID, enemy, enemyMap, fallingMap)
|
||||||
| FOLLOW_SLIME => onDefeated (enemyID, enemy, enemyMap, fallingMap)
|
| FOLLOW_SLIME => onDefeated (enemyID, enemy, enemyMap, fallingMap)
|
||||||
| STRAIGHT_BAT => onDefeated (enemyID, enemy, enemyMap, fallingMap)
|
| STRAIGHT_BAT => onDefeated (enemyID, enemy, enemyMap, fallingMap)
|
||||||
|
| SHIELD_SLIME =>
|
||||||
|
onShieldSlimeAttacked (enemyID, enemy, enemyMap, fallingMap)
|
||||||
|
|
||||||
fun fold (enemyID, (), (fallingMap, enemyMap)) =
|
fun fold (enemyID, (), (fallingMap, enemyMap)) =
|
||||||
case EnemyMap.get (enemyID, enemyMap) of
|
case EnemyMap.get (enemyID, enemyMap) of
|
||||||
|
|||||||
Reference in New Issue
Block a user