SHAKAL
copyright 2022-2025 Sean Evan
publishing as Anvilsong Forge
-------------------------------------------------
-------------------------------------------------
!! CURRENT PRIORITIES !!
enemy infantry v2
grunts and commandos
interactable huts (explodable)
change hut graphic, spawn smoke
spawn point(s) for friendly POWs
make rescuable
create player system to track rescues
create weapon power up on rescue
and power down on death
make evacable
make MIAable
make KIAable
object interactions
water
terrain
grunt huts
commando huts
gate doors
-------------------------------------------------
-------------------------------------------------
Project Shakal v0.8a
"WebGL Preview Update"
fixes, features, spit and polish
updating through 0.8a as WebGL preview releases
WebGL builds are choppy (serial/single-thread),
but in-browser (no download or install rights needed)
Live at https://www.anvilsong.com/shakal/playtest
versions committed:
current release
preview003 - may.09.2025
features:
* mute button (trent issue)- allows testing on public terminals, pause screen state-aware
* mission failed menu on losing last life *WiP*
* mission accomplished menu on reaching the end of the level *WiP*
preview002 - apr.26.2025
fixes:
* player physics (dylan bug) - no more driving through objects or terrain, even at 45 degrees
* player gravity (hexola bug) - no more floating, falling through ground, or spinning in midair
* adjusted camera - centered, no more showing outside the game area, or chopping off in-game areas
* turret collisions (reyen bug) - destroys player now, invincible collisions no longer cost a life
* dud rockets - now correctly explode at end of flight when they do not collide with anything
preview001 - apr.20.2025
initial release
vanilla v0.8a - Level 1, with cheats, no Testbed
v0.8a changes
bug fixes - see above
mute button
! story scene
testbed scene
website updates
mute button
hotkey to M on keyboard or R3 direction down on joystick
game story scene - now seperate from menu scene
on title screen,
after seven seconds of inactivity:
transition scene to Story
(same assets as title)
disable menu input
play Prologue music clip
activate story slide
transition menu and story slides
deactivate menu slide
wait for delay
activate POW slide 1
animate first pair of intro pow images
wait for delay
activate POW slide 2
animate second pair of intro pow images
end of loop or input, return to title
!! IN PROGRESS !!
game testbed scene
player prefab
clone terrain from level 1
-------------------------------------------------
Project Shakal v0.7a / v0.71a
"Mega Multiplayer Update"
oh boy :| alpha1 done, almost ready to roll.
upload? nah! let's add 2 player to the alpha!
...
wow, had NO idea what a can of worms...
so new input, new camera, new everything.
enjoy, it's like 3 updates over almost a year:p
this broke everything for so long
that i commented out 2player and forked it:
v0.71a is the two player alpha
v0.7a is the single player alpha
version committed:
06.19.2024 June
v0.71a changes
* player 2 v1
player 2 has entered the game
prefab cloned from player 1, reskinned blue
prefabs for p2bullet, p2grenade, p2rocket
game objects now P1/P2 split, not shared
player1Grenade and player2 Grenade, etc
PlayerController now P1/P2 split, not shared
Player1Controller, Player2Controller
PlayerInput now spawns players
SpawnPosition now P1/P2 aware
GameManager now instanced right
gamemanager entries for player 2
score
lives
weapon level
shield timer
! stats
! camera entries for player 2
v0.7a changes
* screen text panels
* camera and zoom
* speeds and sizes
* input system
* developer functions v1
* title screen
* statistics overlay
* pause screen
* player death sequence
! continue menu
* grunt v0 placeholder
* commando v0 placeholder
! enemy infantry v1
* misc. improvements
* game manual v1
* website v1
screen text panels
need square screen in widescreen
make left and right panels
left panel
game logo
build version
build date
anvilsong logo
credits
right panel
player 1 and 2 information
score
lives
weapon level
kills in level
camera and zoom - fine tuning
re-zeroed all game entries with odd info
camera starting coordinates
-6.2, 34, -110
camera ceiling height
34
camera FOV (field of vision)
39
##FIX edge view scale bug
LOD (level of detail)
3
across all qualities
##FIX tree/rock fill distance bug
speeds and sizes - fine tuning
all assets scaled up slightly
player speed
475 movement speed
75 rotation speed
player movement animation
loops scale .95 to 1 and back
player gun
1250 speed
0.3 second lifespan
player grenade
400 speed
1.5 second lifespan
30 degree lob
player rocket
850 speed
0.4 second lifespan
enemy infantry gun
10 range
800 speed
1.0 second lifespan
enemy turret gun
13 range
1000 speed
2.0 second lifespan
input system
completely removed old input manager
** broke 2 players and idle gamepads **
now using new unity input system
which uses multiplayer input manager
auto polls idle devices
true drop-in drop-out now possible
really really cool!!!!!!
onPlayerJoin and onPlayerLeave
--> joinAction and leaveAction
return to rigidbody control
player control map
Movement
keyboard - arrow keys, WASD keys
gamepad - left thumbstick, d-pad
Fire1 (gun)
keyboard - leftCtrl key
mouse - left button
gamepad - south button
Fire2 (cannon)
keyboard - leftAlt key
mouse - right button
gamepad - east button
PowerupUse
keyboard - q button
mouse - middle button
gamepad - west button
PowerupLast
keyboard - j button
gamepad - right thumbstick left
PowerupNext
keyboard - k button
gamepad - right thumbstick right
Pause
keyboard - escape key
gamepad - start/menu button
Stats
keyboard - tab key
gamepad - select/view button
CannonPowerdown *cheatmode*
keyboard - o key
gamepad - right bumper
CannonPowerup *cheatmode*
keyboard - p key
gamepad - left bumper
Invincibility *cheatmode*
keyboard - i key
gamepad - left trigger
Airstrike *cheatmode*
keyboard - e key
gamepad - right trigger
DayNightMode *cheatmode*
keyboard - l key
gamepad - north button
menu control map
navigation
keyboard - arrow keys, WASD keys
gamepad - left thumbstick, d-pad
submit
keyboard - spacebar, enter key
gamepad - south button
cancel
keyboard - escape key
gamepad - east button
PlayerInput prefab loads players one and two
-listens for input from unused device
-assigns device to next player
-loads PlayerInput prefab and script
developer functions v1 - cheat mode stuff
weapon powerup button - lb on gamepad/o key
adds 1 to weaponLevel within bounds
weapon powerdown button - rb on gamepad/p key
subtracts 1 from weaponLevel within bounds
invincibility button - lt on gamepad/i key
shieldCheck now adds a 1 second toggle delay
set flag isInvincible to true
set Player->Shield->Bubble renderer visible
disable player collider
toggles with devkey and used by PlayerDeath
title screen
move background image to menu slide
delete empty title and background slides
##FIXES background load in webgl bug
statistics overlay
Stats method in PlayerController
ShowStats/HideStats methods in GameManager
ignores state change if gameActive = false
ignores state change if gamePaused = true
UI elements shared with pause screen
overlay shows at 80% alpha
pause screen
PauseGame method in PlayerController
GamePause/GameUnpause methods in GameManager
sfx added to playerController - index #09
ignores state change if gameActive = false
on pause:
play pause sfx
set gamePaused flag to true
show stats overlay text
set stats canvas alpha to 1
show pause text
set pause text canvas alpha to 1
set worldLight intensity to .2
set bgm volume to .5
set Time.timeScale to 0
on unpause:
set gamePaused flag to false
hide pause text
set pause text canvas alpha to 0
hide stats overlay text
if statsShowing was off pre-pause
set stats canvas alpha from 1 to 0
if statsShowing was on pre-pause
set stats canvas alpha from 1 to .8
set worldLight intensity to 1
set bgm volume to 1
set Time.timeScale to 1
continue menu
after player loses last life
player death sequence
PlayerDeath method in PlayerController
on player death:
define and lock player position
kills floating corpse bug
lock player input
enable invincibility
play explosion animations and sfx
disappear player
moves player under game floor
wait 1 second
enable shield
reappear player
wait flashing for 1 second
unlock player input
wait 1 second
disable invincibility
disable shield
grunt v0 placeholder
placeholder graphic - dark green capsules
prefab created
commando v0 placeholder
placeholder graphic - light green capsules
prefab created
enemy infantry v1
! remaining Infantry placed on map
total placed: ##
! sfx array - 0.shoot 1.die 2.smoosh 3.reload
gave em little helmets with logos
EnemyInfantry script working
knows GameManager so also PlayerController
bullet spawner
bulletSpeed = 700
bulletLifespan = 2.2
isLoaded / isFiring loop
v1 weapon values
loadingRate = 1.35
firingRange = 10
firingRate = 0.35
shotTimer = 0
stats working
shot/exploded/smooshed now seperate stats
misc. improvements
project hierarchy and naming - full overhaul
remove unused assets from project
redefine several editor and Tag entries
mouse cursor locked/hidden in editor play
pause mode unlocks and unhides cursor
started 2 player mode prep
changing 'player' tags to 'player1' tags
create game manual v1
scoring
enemy weaknesses
controller layout
image
keyboard layout
create website v1
anvilsong.com/shakal
animated template
intro
story
current version info
progress bars
progress image gallery
php mailto script
playtest page
game manual page
changelog page
-------------------------------------------------
Project Shakal v0.6a
"KABOOM! Update"
~~ music/sfx, animations, logic,
~~ gameloop, particles, bunch of new stuff
version committed:
07.27.2023 July
v0.6a changes
* EXPLOSIONS
! enemy infantry v1
* enemy turret v2
* projectile logic v2
* background music !!temp!!
* sound effects
* title screen v2
* 'new game' menu scene flow
* 'quit game' menu scene flow
* stats v1
* old script removal and outdated thing cleanup
* item tag database reorganization
EXPLOSIONS
set up as particle system
.tif 6x6 sprite
range emission and lighting
prefab created - can just Instantiate wherever
enemy infantry v1
placeholder graphic - red capsules
sfx array - 0.shoot 1.die 2.smoosh 3.reload
prefab created / improved
script working and evolving
knows gamemanager and player
bullet spawner
bulletSpeed = 700
bulletLifespan = 2.2
isLoaded / isFiring loop
v1 weapon values
loadingRate = 1.35
firingRange = 10
firingRate = 0.35
shotTimer = 0
stats working
shot/exploded/smooshed now seperate stats
enemy turret v2
fixed range and fire timing
better BurstFire method
bullet spawner
bulletSpeed = 750
bulletLifespan = 1.9
v2 weapon values
firingRange = 10
firingRate = 0.35
burstRate = 1.35
shotTimer = 0.0
better DestroyTurret method
projectile logic v2
new projectile controller scripts
!! muuuch better performance now
bullets
new FireBullet script for spawner
new WeaponBullet script for prefab
fixed range
bullets now know if player or enemy fired
grenades
new FireGrenade script for spawner
new WeaponGrenade script for prefab
fixed range
spawns explosion on hit or miss
x, y, z wobbles: random -400 to 400
rockets
new FireRocket script for spawner
new WeaponRocket script for prefab
fixed range
spawns explosion on hit
spawns explosion on miss **correctly!**
rockets now know player's powerup level
spin effect tweaked in script
music !!temp!!
heavy metal BGM (by MOTHERBRAIN! -YouTube)
cut master into individual track clips
export clips in project-usable format
import into project as mp3 audio
!! TO DO - redo as WAV - better looping
Audio Listener in each scene's Main Camera
!! TO DO - perfect BGM looping
sfx
menu sounds
MenuYup - beep affirmative
MenuNope - boop negative
environment sounds
ExplosionMedium
ExplosionLarge
player sounds
PlayerDeath
PlayerFire
GrenadeLaunch
GrenadeWhistle
GrenadeHit
RocketLaunch
RocketHit1
RocketHit2
RocketHit3
enemy sounds
EnemyFire
EnemyTurretFire
title screen v2
title screen canvas now seperate slides
Title Slide
Background
Title Screen
Menu Slide
Copyright Text
Selection Text
One Player Text and Button
Two Player Text and Button
Settings Text and Button
Quit Text and Button
Version Text
Null Text
New Game slide
with script logic to appear after delay
Image (pixel map of lvl1)
New Game Text
Side Effect Text
Press Fire Text and Button
with script logic to appear after delay
new game '1 Player' scene flow
player presses '1 Player' button on menu:
explosion sfx plays
deactivate menu slide
activate new game slide
play New Game music clip
wait some seconds
"Press Fire To Continue' text appears
player presses 'Fire' button
load scene Level 1
quit game scene flow
player presses 'Quit Game' button on menu:
in editor, quit playback mode
in standalone, close game app
player statistics
game manager variables created to track:
player cannon power level
lvl1 enemy infantry destroyed
by shooting
by exploding
by smooshing
lvl1 enemy turrets destroyed
lvl1 enemy patrolboats destroyed
lvl1 enemy brown tanks destroyed
lvl1 enemy blue tanks destroyed
lvl1 pows still captured (in huts)
lvl1 pows rescued (in jeep)
lvl1 pows evacuated (in helicopter)
lvl1 pows missing (on game world)
lvl1 pows dead (killed in player death)
lvl1 commandos still captured (in huts)
lvl1 commandos rescued (in jeep)
lvl1 commandos evacuated (in helicopter)
lvl1 commandos missing (on game world)
lvl1 commandos dead (killed in player death)
created screen canvas and text for stats
showable/hidable on pause
-------------------------------------------------
Project Shakal v0.5a
"Arsenal and Terrain Update"
version recommitted:
12.01.2022 December
v0.5a changes
* finish passable/unpassable terrain
* visual variation on ground plane
* make bridge on river region
* make water more water-ey
* make water impassable
* make jungle more tree-ey
* update buildings
* player grenades
* player rockets
* game manager expansion
terrain layer complete
water lower than ground plane
hills higher than ground plane
surface heights smoothed and normalized
visual ground variation
standard asset pack import
terrain assets
ground plane now has 3 grass texture stamps
sand texture painted onto ground plane
grass textures alpha blended and painted
"nature-ized" coastline
make bridge over river
alpha bridge placed
mated to invisible seawalls
water-ey water
standard asset pack import
water assets
made water plane lower than ground
set up simple looping animation
impassable waterways
made invisible seawalls on water edges
roughed up, naturalized terrain topography
jungle-ey jungle
alpha homemade trees replaced
standard asset pack import
speedtree assets
alpha homemade rocks replaced
standard asset pack import
rock assets
made rocks impassable
made rocks destroy bullets
thick trees placed on ridges
ground and hills texture painted
impassables got more trees as needed
buildings updated
made buildings bulletproof
tweaked scale and placement
player grenades
created grenade prefab
made spawner point on player cannon
spawner angle now makes neat arcing path
created controller script and logic
made neat lil y-rotating wobble script
made only one grenade launchable at a time
player rockets
created rocket prefab
made spawner point on player cannon
created controller script and logic
made x-rotating spin script
made only one rocket launchable at a time
game manager expansion
now handles player cannon powerup level
-------------------------------------------------
Project Shakal v0.4a
"UI / Level 1 Objects Update"
version committed:
11.12.2022 November
v0.4a changes:
* title sequence
* on-screen text
* score
* lives
* game manager expansion
* objects and buildings - level 1
* placement of all turrets - level 1
* center player gun to vehicle
title sequence
imported background image v2, lookin snazzy
added Settings button and logic
on-screen game text and logic
handled by game manager now
show current score in 000000 padded format
show number of lives remaining
game manager
track isGameActive flag
track and display score and remaining lives
handle game start, game over, quit methods
objects and buildings v1- level 1
scaled level map and 3d assets to each other
walled in game area better
create rocks, placed 7x
create trees, placed 52x
create sandbags, placed 7x
create walls and gate for POW compound
create POW huts, placed 4x
create GI huts, placed 3x
create POW helipad and lanterns
turrets
placed 15x
scaled to match terrain, refined placement
tweaked range to start firing further out
player gun / minor player vehicle restyle
moved gun and turret to center of vehicle
seperated from cannon mount
changed cannon mount to fit rotation
made vehicle tires and lights larger
lifted side skirts, added back seat area
moved window to fit new gun turret location
-------------------------------------------------
Project Shakal v0.3a
"Super Update, Now With Turrets!"
version committed:
10.18.2022 October
v0.3a changes:
* splash screen
* title screen
* scenes (title screen, levels...)
* game manager script
* walls
* player prefab
* updated visuals
* score system
* number of lives system
* gun fires bullets {Fire1}
* collision detection
* player bullets prefab
* enemy turret prefab
* basic aim-towards-player logic
* fires three round burst, coroutine method
* collision detection
* points system
* hitpoint system - 3x bullets to destroy
* enemy bullets prefab
splash screen
anvilsong forge logo
splitscreen, 2 seconds
title screen
imported background image v1
buttons (1 player, 2 player, quit)
imported button image
button navigation logic
1 player button active by default
stopped mouse from stealing button focus
wraps first->last and last->first
text formatted
scene system working
new title screen scene: ShakalTitle
new working scene: Shakallevel 1
game manager
UI and event handling script: GameManager
isGameActive false
isGameOver false
StartGame() working
QuitGame() working
walls around arena
collision rules
if hit by player bullet
if hit by enemy bullet
will also block player movement
2 box colliders
1 trigger and 1 physical barrier
player prefab
new player system variables
score 0
lives 5
collision rules
if hit by enemy bullet
if hit by enemy
tuned bullet speed and lifespan
player bullet prefab
player bullet control script:
PlayerBulletController
speed 700
lifespan .5
enemy turret prefab
turret control script: TurretController
firingRange 10
firingRate 0.31
bulletHitsToDestroy 3
points 500
collision rules
if hit by player
if hit by player bullet
shoot - aim - shoot loop
aim - LookAt method
shoot - coroutine loop method
tuned bullet speed and lifespan
enemy bullet prefab
enemy bullet control script:
EnemyBulletController
enemyBulletSpeed 1000
enemyBulletLifespan 1.65
instantiate method
-------------------------------------------------
Project Shakal v0.2a
"Movement Update"
version committed:
09.12.2022 September
v0.2a changes:
* game icon
* hide mouse arrow
* quit game menu function
* player prefab
* updated visuals
* updated motion
* 8-way smoothed player motion
* independant turret rotation
* movement now animated
built game icon is now anvilsong forge logo
game now hides mouse cursor while running
add function to quit game (in editor or build)
"Esc" keyboard keypress
player prefab
edit player appearance
blue sphere -> green jeep v1
!!! stuff happened, v1 is now blue smoke !!!
!!! after a biiiiiigly amount of time... !!!
blue sphere -> green jeep v2
edit player motion
player movement now 8-way (rounded)
using rigidbody, rotation/velocity method
speed 200
speedRotation 25
horizontal 0
vertical 0
horizontalRaw 0
verticalRaw 0
player now faces direction of travel
quaternian/slerp/45deg method
turret now faces 'up' regardless of travel
v
2nd rigidbody, constrain x, y, z rotation
animator controller exists
add move animation
add "Moving" state
add "Not Moving" state
add transitions
add "PlayerMoving" animation
scale .75>.85 over .2 sec
-------------------------------------------------
Project Shakal v0.1a
"Framework - Update 1"
version committed:
09.12.2022 September
game window: 1024x960
v0.1a changes:
* camera
* motion follows player
* constrain to game area
* lighting
* ground
* player prefab
* basic motion by input
* constrain to game area
main camera - isometric
transform -13.5, 12, -115
rotation 90, 0, 0
scale .75, 1, .75
camera control script: CameraController
set camera view height
camHeight 12
constrain to within game area
camWallX 13.5
camWallZ 115
move camera with player
camPaddingX 3.8
camPaddingTop 1.35
camPaddingBottom 4.25
forward motion updates constraint
camPadding 4
forward motion updates bottom boundary
camProgress -116.5
lighting
transform 15.5, 10, -80
rotation 50, -30, 0
white, directional
ground - plane
scale 4.25,1,24.5
player prefab
blue sphere
transform -16.25, .75, -115.5
scale .75, .75, .75
rigidbody constrain x, y, and z rotation
player control script: PlayerController
using transform.Translate method
speed: 3
constrain to within game area
wallX 20
wallZ 120.5
forward motion updates constraint
playerPadding 11.5
playerProgress -130
-------------------------------------------------
-------------------------------------------------
Project created using Unity engine
3D models created using Unity editor:
player vehicle
player bullet/grenade/rocket
enemy turret
enemy bullet
tree/rock/sandbag (retired)
POW/commando huts
helipad/lantern
POW compound and gate
river bridge
walls
powerup
UI and text created using Unity TextMesh Pro:
title screen text
title screen buttons
lives and score text
null text entry
C# scripts written using Visual Studio
** w/net searching of course, **
** but no copy-paste jazz **
NO AI CODE, during any phase ever, 0.0%
Art created manually using MS Paint and GIMP:
logo
title screen
SHAKAL text art
warzone wall background
white/blue chain backdrop
title screen button iconw
Art created using AI art app NightCafe:
POW portraits in story menu slides
sneak peek and promo game art slides
SFX created using jsfxr and audacity
Design, testing, documentation, blablalba
in-house, thanks compound testers!!!
-------------------------------------------------
$ Resources, sound, art, any and everything NOT $
$ self-created goes here... attribution is cool. $
firstly, music, was not made in-house
-made by MOTHERBRAIN! in 2015
found on YouTube and got the feels,
!! will NOT release with this music !!
!! note to self: hire good musician
"Standard Assets" free asset pack
-made by Unity
* SpeedTree: Palm_Desktop
* TerrainAssets: Grass, Cliff, Sand albedos
* Water: WaterProDaytime
"Rock Package" free asset pack
-made by shui861wy
* rock_05 and rock_06 prefabs
"Particle Pack" free asset pack
-made by Unity
* explosion sprite .tif
* found Tvtig guide animating w/particles
-------------------------------------------------
Shakal © Sean Evan 2022-2025
responsive website template by Khai Tawng