David Liu

The Liquidators

About the Game

The Liquidators is a resource management game based on the Chernobyl event and its aftermath. The player sends out workers to help clean out radioactive waste that's been scattered through cities. However, workers cannot be left outside too long or they will start to be effected by the radiation. The player must manage the times for all the workers exposed to radiation while cleaning up the mess of radioactive debris.

Developed in Hero Jam 2017

Role in Development

  • Designer: Tiger Louck
  • Programmer: David Liu
  • Modeler: Tiger Louck

Most of my development for this project involved changing shaders and implementing them. I had not touched shaders before this point, so it was difficult to try and understand what was going on with the code. This experience was quite a curve in learning for me, as I spent lots of the time trying to make the shader functional at all in the project. For the rest of the development, I made a manager system that would send out the workers on simple paths towards their goal (Represented by what the player selected).

Script Examples

Selected.shaderHover.shaderOutlineShader.csHumanMovement.cs
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Selected" {
	Properties{
		_OutlineColorSelect("Outline Color", Color) = (0,1,0,1)
		_OutlineSelect("Outline width", Range(0.0, 0.03)) = 0.005
	}

		CGINCLUDE
#include "UnityCG.cginc"

		struct appdata {
		float4 vertex : POSITION;
		float3 normal : NORMAL;
	};

	struct v2f {
		float4 pos : POSITION;
		float4 color : COLOR;
	};

	uniform float _OutlineSelect;
	uniform float4 _OutlineColorSelect;

	v2f vert(appdata v) {
		// just make a copy of incoming vertex data but scaled according to normal direction
		v2f o;
		o.pos = UnityObjectToClipPos(v.vertex);

		float3 norm = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);
		float2 offset = TransformViewToProjection(norm.xy);

		o.pos.xy += offset * o.pos.z * _OutlineSelect;
		o.color = _OutlineColorSelect;
		return o;
	}
	ENDCG

		SubShader{
		//Tags{ "Queue" = "Transparent" }

		Pass{
		Name "BASE"
		Cull Back
		Blend Zero One

		// uncomment this to hide inner details:
		//Offset -8, -8

		SetTexture[_OutlineColorSelect]{
		ConstantColor(0,0,0,0)
		Combine constant
	}
	}

		// note that a vertex shader is specified here but its using the one above
		Pass{
		Name "OUTLINE"
		Tags{ "LightMode" = "Always" }
		Cull Front

		// you can choose what kind of blending mode you want for the outline
		Blend SrcAlpha OneMinusSrcAlpha // Normal
		//Blend One One // Additive
		//Blend One OneMinusDstColor // Soft Additive
		//Blend DstColor Zero // Multiplicative
		//Blend DstColor SrcColor // 2x Multiplicative

		CGPROGRAM
#pragma vertex vert
#pragma fragment frag

		half4 frag(v2f i) :COLOR{
		return i.color;
	}
		ENDCG
	}


	}

		Fallback "Diffuse"
}