Muziko Kreito Universo Documentation & Source Code
-
Upload
kevin-heis -
Category
Documents
-
view
220 -
download
0
Transcript of Muziko Kreito Universo Documentation & Source Code
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
1/49
Terminal Creative Project Documentation
Presented to the University of Oregon School of Music and Dancein partial fulfillment of the requirements for the degree of
Master of Music in Intermedia Music Technology
June 2010
Muziko Kreito Universo
Kevin Heis
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
2/49
Muziko Kreito Universo, a project prepared by Kevin Heis in partial fulfillment of the
requirements for the Master of Music degree in the School of Music and Dance. Thisterminal project has been approved and accepted by:
___________________________________________________________________________
Dr. Jeffrey StoletChair of the Examining Committee
___________________________________________________________________________
Date
Committee in Charge:
Dr. Jeffrey Stolet, ChairYing TanCraig HickmanRobert PontoDr. Steve Vacchi
Accepted by:
___________________________________________________________________________
Dr. Ann B. TedardsAssociate Dean and Director of Graduate Studies, School of Music and Dance
Heis, Muziko Kreito Universo: Project Documentation, 2
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
3/49
Heis, Muziko Kreito Universo: Project Documentation, 3
2010 Kevin Heis
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
4/49
Thanks
CommitteeDr. Jeffrey Stolet, Professor of Music Technology, Advisor
Professor Ying Tan, Associate Professor of Digital Art
Professor Craig Hickman, Professor of Digital Art
Professor Robert Ponto, Associate Professor of Conducting
Dr. Steve Vacchi, Associate Professor of Bassoon
ColleaguesJenifer Jaseau
Simon HutchinsonChi Wang
Clay Kent
Jon Bellona
Loren Mohler
Kevin Drake
Tammy Coles
TechnologyThe Cycling '74 team
The developers of Cosm at the University of California, Santa Barbara
Heis, Muziko Kreito Universo: Project Documentation, 4
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
5/49
Table of ContentsAbstract 6
Concept 6
Technology 6In conjunction 6
Textual Description 7
State Machine Diagram 11
Source code 12
Max patches 13
Lua source code 18
File: mku.lua 18File: universal.lua 19File: tween_delay.lua 22
File: color.lua 23File: flicker.lua 24File: bolts.lua 24File: kreito.lua 25
File: kreito_template.lua 34File: radiuso.lua 35File: flugilo.lua 37File: konko.lua 40
File: streko.lua 43File: drivo.lua 45File: mku_c74.txt 49
Heis, Muziko Kreito Universo: Project Documentation, 5
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
6/49
AbstractConceptMuziko Kreito Universo is a three-dimensional visual and ambisonic sound installation. The
work is experienced as a digital universe of intelligent musical creatures, where human
participants act as gods influencing the environment as the creatures strive for auditory
greatness. The work explores themes of creation and destruction, of power and servitude,
and of the role of humans in an environment with other beings, as well as the fundamental
relationship between the essence of sound and decision-making beings.
TechnologyThe primary technologies used in Muziko Kreito Universo are:
1. Max/MSP/Jitter, an audiovisual development environment;
2. OpenGL, a graphics library specification;
3. Cosm, a framework for virtual worlds in Max/MSP/JItter;
4. Lua, a powerful, beautiful, efficient scripting language; as well as a
5. SpaceNavigator, a six-degree three-dimensional mouse; and
6. c74, a customizable user interface application on the iPod Touch.
In conjunctionA video demonstration can be found at:
http://kevinheis.net/mku/
Source code is provided at the end of this document.
Heis, Muziko Kreito Universo: Project Documentation, 6
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
7/49
Textual Description
Muziko Kreito Universo is an original audiovisual interactive work based on concepts
of artificial intelligence. Muziko Kreito Universo is a digital universe of intelligent music
creatures. These musical creatures live full life cycles as they strive for auditory greatness.
A human acts as a god to the musical creatures by influencing various aspects of the
universe. The work is experienced as an installation: a three-dimensional visual and
ambisonic universe. Muziko Kreito Universo works with ideas of creation and destruction,
power and servitude, the role of humans in an environment with other beings, and the
fundamental essence of sound to decision-making beings.
The audiovisual interactive work is inspired by video games, real world animals, and
scholarly and artistic works. Some of the influential video games include Flow, The Sims,
Osmos, Elektroplankton, Spore, and Black and White. The models and animations of the
creatures are based on deep sea creatures, as seen in Planet Earth and The Deep. Some of
the scholarly influences include Visual Space Music by mememamo, Marc Downie's work on
intelligent music characters at MIT, and works using the Cosm framework from UC, Santa
Barbara.
Muziko Kreito Universo is built out of a combination of software and human user
interaction technologies. The software used is Max/MSP/Jitter, an audiovisual development
environment, Cosm, a framework for building virtual worlds in Max/MSP/Jitter, the Lua
scripting language, and OpenGL. The user interaction devices are a SpaceNavigator, a six-
degree, three-dimensional mouse, and an iPod Touch running the c74 application.
Heis, Muziko Kreito Universo: Project Documentation, 7
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
8/49
The creatures in the Muziko Kreito Universo environment are driven by state
machines. A state machine is a model used by computer programmers to create agents. An
agent is an entity that makes decisions. Each creature has a state machine. The state
machine is comprised of a set of states. For each state machine in the Muziko Kreito
Universo environment, only one state can be active at a time. Within each state there exists
a set of behaviors. These behaviors include embedded rules that can cause the active state
to change to a different state.
Each creature has three attributes with which to guide decision-making. The three
attributes are age, health, and energy. At any point in time, each creature is in one of
twelve creature states, which are birth, follow parent, wander, sleep, pursue, play,
procreate, hunt, fight, chase, flee, and death. The three kinds of creature relationships,
parent and children, playmates, and prey and predator, have been formulated in this world.
The creatures move in space by use of steering forces. A steering force is an algorithm for
determining paths for autonomous agents using vector mathematics.
Muziko Kreito Universo's creatures are represented in the universe both visually and
sonically. The sound system is rendered in real time in ambisonics, an audio methodology
for encoding and decoding multiple audio channels to create a realistic spatialization of
sound producing objects. The ambisonic system uses panning, volume, low-pass filtering,
reverberation, and pitch to spatialize sound producing objects. Each creature type has a set
of sound samples associated with it that change over time. These samples are played back
with changes in rhythm, pitch, volume, and distortion depending on the creature's active
state and attributes.
Heis, Muziko Kreito Universo: Project Documentation, 8
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
9/49
There are five types of creatures in Muziko Kreito Universo. These are named radiuso
(jelly), flugilo (ray), konko (shelled creature), streko (eel), and drivo (drifter). These models
are rendered in OpenGL using simple geometric shapes, like spheres and cones.
Each of these models has a set of animations that are associated with the model.
These animations are move, procreate, sleep, death, flee, and four possible play/fight
animations. The animations are executed by use of tweens, an algorithm that changes a
numeric variable over time. The colors and animations of the creatures represent the
creature's current state.
The human participant interacts with these creatures with a SpaceNavigator and an
iPod Touch running the c74 application. The SpaceNavigator provides the end user the
ability to move through the digital universe by rotating, pushing, and pulling on a knob
that can be moved in six directions. The c74 application allows the participant to influence
the creatures' health and energy globally, pause the universe, or return the position of the
participant to the starting position. The influence over health and energy is represented by
a heads-up style display, with colors to represent the strength and type of influence the
participant has over the creatures.
The primary challenges of creating Muziko Kreito Universo were the issue of playing
god, the challenge of multiplicity, and working in three visual and sonic dimensions. The
question of playing god is a natural part of creating an artificial intelligent system, and
provokes questions such as 'What is the effect of a god?'The system has been designed to
answer these questions as directly as possible. The challenge of multiplicity is both
conceptual and technological. With up to thirty-two creatures in the space, the creatures
Heis, Muziko Kreito Universo: Project Documentation, 9
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
10/49
needed to be simple and obvious in their actions. Finally, the three-dimensional challenges
were solved using a combination of audiovisual and interactive technologies.
The work will be installed on Monday, April 19th from 8:30am to 12:30pm in the
University of Oregon School of Music in room 140; Friday, April 30th from 10am to 3pm in
the University of Oregon Erb Memorial Union in the concourse; Saturday, May 1st from 6pm
to 10pm in the University of Oregon School of Music in room 140 as part of the [m] event;
and performed on Saturday, May 8th at the Future Music Oregon concert at 8pm.
Heis, Muziko Kreito Universo: Project Documentation, 10
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
11/49
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
12/49
Source codeThe source code of this document is divided into two sections: Max patches, and Lua
source code.
Heis, Muziko Kreito Universo: Project Documentation, 12
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
13/49
Max patches
Heis, Muziko Kreito Universo: Project Documentation, 13
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
14/49
Heis, Muziko Kreito Universo: Project Documentation, 14
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
15/49
Heis, Muziko Kreito Universo: Project Documentation, 15
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
16/49
Heis, Muziko Kreito Universo: Project Documentation, 16
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
17/49
Heis, Muziko Kreito Universo: Project Documentation, 17
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
18/49
Lua source codeFile: mku.lua
function msg_float (i)! u.time_elapse = i! if u.is_running == 1 then! ! u.sketch:reset()! ! u.time = u.time + u.time_elapse! ! u.global_age = u.life_rate * u.time_elapse! ! u.count_kreitoj()! ! flicker:update()! ! for i in pairs(u.kreitoj) do! ! ! if u.kreitoj[i] ~= nil then! ! ! ! u.kreitoj[i]:update()! ! ! end! ! end! ! u.bolts:draw()! end! u.update_resetter()! u.send("time_elapse", u.time_elapse)end
function scale (i)! u.scale(i)endfunction control_data (health, energy)! u.control_data (health, energy)endfunction k_message (callername, element, ...)! if u.kreitoj[callername] ~= nil then! ! if element == "position" then! ! ! u.kreitoj[callername].position_x = arg[1]! ! ! u.kreitoj[callername].position_y = arg[2]! ! ! u.kreitoj[callername].position_z = arg[3]! ! elseif element == "rotate" then! ! ! u.kreitoj[callername].rotate_r = arg[1]! ! ! u.kreitoj[callername].rotate_x = arg[2]! ! !
u.kreitoj[callername].rotate_y = arg[3]! ! ! u.kreitoj[callername].rotate_z = arg[4]! ! end! endendfunction sound_path (path)! flicker.localpath = pathendfunction is_running (toggle)! u.is_running = toggleendfunction reset_elapse ()! u.interact_elapse = 0endfunction master_position (x, y, z, a, b, c)! u.masterx = x! u.mastery = y! u.masterz = z! u.lookatx = a! u.lookaty = b! u.lookatz = cendimportfile('universal.lua')importfile('flicker.lua')importfile('color.lua')importfile('tween_delay.lua')importfile('bolts.lua')
Heis, Muziko Kreito Universo: Project Documentation, 18
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
19/49
importfile('kreito.lua')importfile('radiuso.lua')importfile('flugilo.lua')importfile('konko.lua')importfile('streko.lua')importfile('drivo.lua')
File: universal.lua
u = {}u.time = 0u.time_elapse = 0u.interact_elapse = 0u.global_health = 0u.global_energy = 0u.global_age = 0u.is_running = 1u.life_rate = 0.0000024 --life is approximately 4 minutes longu.slow_rate = 0.000012u.mid_rate = 0.000024u.fast_rate = 0.000048u.stop_rate = 0u.walk_rate = 0.004u.run_rate = 0.012u.pitch_rate = u.mid_rate * 240u.time_range = 2500u.lumo_hue = 0u.lumo_saturation = 0u.specular_intensity = 0u.kreitoj = {}u.kreitoj_count = {}u.age_to_octave = {4, 2, 1, 1/2, 1/4, 1/8, 1/8, 1/8, 1/8, 1/8}u.kreito_types = {"radiuso", "flugilo", "konko", "streko", "drivo"}u.desired_radius = 1u.slices = 10u.loc = ""u.h_pi = math.pi / 2
u.sketch = jit.new("jit.gl.sketch", this.drawto)u.sketch:reset()u.sketch.smooth_shading = 1u.sketch.lighting_enable = 1u.sketch.blend_enable = 1u.sketch.auto_material = 0u.sketch.shininess = 50u.sketch.blend_mode = {6, 1}u.sketch:glmatrixmode("modelview")u.sketch.enable = 1u.sketch.depth_clear = 1u.sketch.depth_enable = 1u.sketch.layer = 9999u.masterx = 0u.mastery = 0u.masterz = 0u.lookatx = 0u.lookaty = 0u.lookatz = 0function u.createClass (...)! local function search (k, plist)! ! for i=1, table.getn(plist) do! ! ! local v = plist[i][k]! ! ! if v then return v end! ! end! end! local c = {}
Heis, Muziko Kreito Universo: Project Documentation, 19
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
20/49
! setmetatable(c, {__index = function (t, k) return search(k, arg) end})! c.__index = c! function c:new (o)! ! o = o or {}! ! setmetatable(o, c)! ! return o! end! return c
endfunction u.remove (arr, element)! for i,v in ipairs(arr) do! ! if v == element then! ! ! table.remove(arr, i)! ! ! break! ! end! endendfunction u.scale (i)! u.max_kreitoj = 16 * i! u.world_size = 4 * u.max_kreitoj! u.orb_size = math.ceil(math.sqrt(2 * (u.world_size)^2)) * 6/5! u.send("world_size", u.world_size)! u.send("orb_size", u.orb_size)
! u.send("max_kreitoj", u.max_kreitoj)endfunction u.send (location, ...)! if location ~= u.loc then! ! outlet(0, "send", location)! end! outlet(0, ...)endfunction u.control_data (h, e)! --lazy color object creation! if u.lumo_color == nil then! ! u.lumo_color = color:new()! end! --Get 0 to 1 values into -1 to 1! local health = h * 2 - 1! local energy = e * 2 - 1! --Get the intensity of the overall effect! local intensity = math.abs(health) + math.abs(energy)! local percent_health = math.abs(health) / intensity! local percent_energy = math.abs(energy) / intensity! if intensity > 1 then intensity = 1 end! u.specular_intensity = intensity + 1! u.lumo_saturation = intensity! flicker.rate = (1 - intensity) * 29500 + 500! u.lumo_light = 1/4! --Set the global effects! u.global_health = health * u.fast_rate * 10! u.global_energy = energy * u.fast_rate * 10! --Figure out the hue via weighted average! local par_h = 0! local par_e = 0
! if health > 0 then! ! par_h = percent_health * 1/2! elseif health < 0 then! ! par_h = percent_health * 1! end! if energy > 0 and health > 0 then! ! par_e = percent_energy * 1/4! elseif energy > 0 then! ! par_e = percent_energy * 5/4! elseif energy < 0 then! ! par_e = percent_energy * 3/4
Heis, Muziko Kreito Universo: Project Documentation, 20
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
21/49
! end! u.lumo_hue = par_h + par_e! --Calculate color and send it out! u.lumo_color:hsl2rgb(u.lumo_hue, u.lumo_saturation, u.lumo_light)! u.send("intensity", intensity)! u.send("lighting", "light_diffuse", u.lumo_color.r, u.lumo_color.g, u.lumo_color.b)! u.send("lighting", "light_specular", u.specular_intensity, u.specular_intensity,! ! u.specular_intensity)! u.send("lumo_color", "color", u.lumo_color.r, u.lumo_color.g, u.lumo_color.b,! ! u.lumo_saturation)endfunction u.count_kreitoj ()! --set the count for all types to zero! for j in ipairs(u.kreito_types) do! ! u.kreitoj_count[u.kreito_types[j]] = 0! end! --add each kreito to its faction's count! for j in pairs(u.kreitoj) do! ! for k in ipairs(u.kreito_types) do! ! ! if u.kreitoj[j].kreito_type == u.kreito_types[k] then! ! ! ! local m = u.kreitoj_count[u.kreito_types[k]]! ! ! ! u.kreitoj_count[u.kreito_types[k]] = m + 1! ! ! end
! ! end! end! --if a faction has no member, make one! for j in ipairs(u.kreito_types) do! ! if u.kreitoj_count[u.kreito_types[j]] == 0 then! ! ! u.genesis(u.kreito_types[j])! ! end! endendfunction u.ra()! return (math.random() * u.world_size * 2 - u.world_size) * 9/10endfunction u.genesis (kind)! --find an empty slot! local childnum = nil! for i = 1, u.max_kreitoj do! ! if u.kreitoj[i] == nil then! ! ! childnum = i! ! ! break! ! end! end! --make a kreito of the correct kind in the empty slot! if childnum ~= nil then! ! u.kreitoj[childnum] = u[kind]:new()! ! local c = u.kreitoj[childnum]! ! c:setup()! ! c.name = childnum! ! c:set_position{u.ra(), u.ra(), u.ra()}! ! c:set_rotate{90, u.ra(), u.ra(), u.ra()}! ! c:add_tween{0, 1, 2000, 'linear', 'alpha'}! end
endfunction u.update_resetter ()! u.interact_elapse = u.interact_elapse + u.time_elapse! if u.interact_elapse > 20000 then! ! u.send("reset_controls", 'bang')! ! u.interact_elapse = 0! end! u.send("time_elapse", u.time_elapse)endu.color_table = {! birth = 0,
Heis, Muziko Kreito Universo: Project Documentation, 21
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
22/49
! follow_parent = 60/360,! wander = 180/360,! sleep = 240/360,! pursue = 150/360,! play = 120/360,! procreate = 300/360,! hunt = 20/360,! fight = 0,! chase = 0,! flee = 270/360,! death = 0}u.volume_table = {! birth = 1/2,! follow_parent = 1/3,! wander = 1/3,! sleep = 1/10,! pursue = 1/2,! play = 1,! procreate = 1,! hunt = 1/2,! fight = 1,! chase = 2/3,
! flee = 1/2,! death = 1/2}
File: tween_delay.lua
--tweentween = {}function tween:set ( t )! --[[! t[1] = begin (int)! t[2] = end (int)! t[3] = duration (int)! t[4] = tween type (string)! t[5] = super's property (string)
! t[6] = super's final function (string)! ]]--! self.begin = t[1]! self.change = t[2] - t[1]! self.duration = t[3]! self.tween_type = t[4]! self.property = t[5]! self.final_function = t[6]! self.start_time = u.timeendfunction tween:update ()! if u.time - self.start_time > self.duration then! ! if self.final_function ~= nil then! ! ! self.super[self.final_function](self.super)! ! end! ! u.remove(self.super.tweens, self)! else self[self.tween_type](self)! endendfunction tween:linear ()! self.super[self.property] = self.change * (u.time - self.start_time) /! ! self.duration + self.beginendfunction tween:sine ()! self.super[self.property] = self.change / 2 * (1 - math.cos(math.pi * (u.time! ! - self.start_time) / self.duration)) + self.beginend
Heis, Muziko Kreito Universo: Project Documentation, 22
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
23/49
u.tween = u.createClass(tween)--delaydelay = {}function delay:set (t)! --[[! t[1] = duration (int)! t[2] = function (string)! ]]--! self.start_time = u.time! self.duration = t[1]! self.func = t[2]endfunction delay:update ()! if u.time - self.start_time > self.duration then! ! self.super[self.func](self.super)! ! u.remove(self.super.delays, self)! endendu.delay = u.createClass(delay)
File: color.lua
color = {}
color.r = 0color.g = 0color.b = 0function color:hsl2rgb (h, s, l)! if s == 0 then! ! self.r = l! ! self.g = l! ! self.b = l! else! ! local q! ! if l < 1/2 then! ! ! q = l * (1 + s)! ! else! ! ! q = l + s - l * s! ! end
! ! local p = 2 * l - q! ! self.r = self:hue2rgb (p, q, h + 1/3)! ! self.g = self:hue2rgb (p, q, h)! ! self.b = self:hue2rgb (p, q, h - 1/3)! endendfunction color:hue2rgb (p, q, t)! while t < 0 do t = t + 1 end! while t > 1 do t = t - 1 end! if t < 1/6 then! ! return p + (q - p) * 6 * t! elseif t < 1/2 then! ! return q! elseif t < 2/3 then! ! return p + (q - p) * (2/3 - t) * 6! else! ! return p! endendcolor = u.createClass(color)
Heis, Muziko Kreito Universo: Project Documentation, 23
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
24/49
File: flicker.lua
flicker = {}flicker.rate = 30000flicker.time = 0flicker.count = 1flicker.folders = 10
flicker.set = math.ceil(math.random() * flicker.folders)flicker.localpath = nilfunction flicker:update ()! self.time = self.time + u.time_elapse! if self.time > self.rate then! ! self:flick()! endendflicker.toAl = { 'a', 'b', 'c', 'd', 'e', 'f' }function flicker:flick ()! if self.count > #u.kreito_types then! ! self.count = 1! ! self.set = math.ceil(math.random() * self.folders)! end! if self.localpath ~= nil then! ! local p = self.localpath.."/"..self.set.."/"..flicker.toAl[self.count]..".aiff"! ! u.send("buf_"..u.kreito_types[self.count], "read", p)! end! self.time = 0! self.count = self.count + 1end
File: bolts.lua
u.bolts = {}function u.bolts:draw ()! local kposx! local kposy! local kposz! local ox = u.bolts.x! local oy = u.bolts.y! local oz = u.bolts.z! u.bolts.x = (u.masterx - 4 * (u.lookatx - u.masterx) + ox ) / 2! u.bolts.y = (u.mastery - 4 * (u.lookaty - u.mastery) + oy ) / 2! u.bolts.z = (u.masterz - 4 * (u.lookatz - u.masterz) + oz ) / 2! local constant = u.lumo_saturation * .01! u.sketch:glpushmatrix()! u.sketch:glcolor(u.lumo_color.r, u.lumo_color.g, u.lumo_color.b, u.lumo_saturation *! ! math.random() / 2)! for i in pairs(u.kreitoj) do! ! if u.kreitoj[i] ~= nil then! ! ! kposx = u.kreitoj[i].position_x! ! ! kposy = u.kreitoj[i].position_y! ! ! kposz = u.kreitoj[i].position_z! ! ! u.sketch:glbegin("tri_strip")! ! ! u.sketch:glvertex(u.bolts.x, u.bolts.y+constant, u.bolts.z)
! ! ! u.sketch:glvertex(u.bolts.x, u.bolts.y-constant, u.bolts.z)! ! ! u.sketch:glvertex(kposx, kposy, kposz)! ! ! u.sketch:glend()! ! end! end! u.sketch:glpopmatrix()endu.bolts.x = 0u.bolts.y = 0u.bolts.z = -100
Heis, Muziko Kreito Universo: Project Documentation, 24
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
25/49
File: kreito.lua
kreito = {}function kreito:setup ()! --movement parameters! self.mvmt_hault = 2! self.mvmt_ease = 7
! self.check_dist = 1! self.azimuth = 0! self.elevation = 0! self.delta_azimuth = 0! self.delta_elevation = 0! self.magnitude = 0! self.max_speed = 0! self.speed = 0! self.w_target_x = u.ra()! self.w_target_y = u.ra()! self.w_target_z = u.ra()! self.position_x = 0! self.position_y = 0! self.position_z = 0! self.rotate_r = 0! self.rotate_x = 0! self.rotate_y = 0! self.rotate_z = 0! --ai parameters! self.age = 0! self.health = 1! self.energy = 1! self.name = 0! self.delta_health = 0! self.delta_energy = 0! self.current_state = "birth"! --relationship parameters! self.prey = nil! self.predator = nil! self.parent_self = nil! self.playmates = {}
! self.children_kreito = {}! --sound parameters! self.volume = 1/2! self.delta_pitch = 0! self.overdrive = 1! self.frequency = 0! self.lasttick = u.time! self.millis = 0! self.pulse = 0! self.pitch = math.random() * 12! --tween and delay! self.tweens = {}! self.delays = {}! --color variables! self.hue = u.color_table["follow_parent"]! self.saturation = 0! self.light = 1/4! self.alpha = 0! self.color = color:new()! --faction param setup! self:setup_faction()! --fade in! self:add_tween{0, 1, 2000, 'linear', 'alpha'}end--movement functionsfunction kreito:mvmt_stop ()! self.speed = 0
Heis, Muziko Kreito Universo: Project Documentation, 25
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
26/49
! self.delta_azimuth = 0! self.delta_elevation = 0endfunction kreito:set_wtarget ()! self.w_target_x = u.ra()! self.w_target_y = u.ra()! self.w_target_z = u.ra()end
function kreito.wrap90 (n)! while n > 45 do! ! n = n - 45! end! while n < -45 do! ! n = n + 45! end! return nendfunction kreito:steer (mode, target)! --figure out the difference vector! if mode == "flee" then! ! self.v_x = self.position_x - target.position_x! ! self.v_y = self.position_y - target.position_y! ! self.v_z = self.position_z - target.position_z
! elseif mode == "wander" then! ! self.v_x = self.w_target_x - self.position_x! ! self.v_y = self.w_target_y - self.position_y! ! self.v_z = self.w_target_z - self.position_z! else! ! self.v_x = target.position_x - self.position_x! ! self.v_y = target.position_y - self.position_y! ! self.v_z = target.position_z - self.position_z! end! --store previous values for delta calculation! self.prev_azimuth = self.azimuth! self.prev_elevation = self.elevation! --get magnitude and normalize difference vector! self.magnitude = math.sqrt((self.v_x)^2 + (self.v_y)^2 + (self.v_z)^2)! if self.magnitude < self.mvmt_hault then! ! self.magnitude = 0! ! self.azimuth = 0! ! self.elevation = 0! else! ! self.v_x = self.v_x / self.magnitude! ! self.v_y = self.v_y / self.magnitude! ! self.v_z = self.v_z / self.magnitude! ! self.azimuth = math.atan2(self.v_x, self.v_z) * 180 / math.pi! ! self.elevation = math.acos(self.v_y) * 180 / math.pi - 90! end! --calcuate change! self.t_e = u.time_elapse / 10! self.delta_azimuth = self.wrap90(self.azimuth - self.prev_azimuth) * self.t_e! self.delta_elevation = self.wrap90(self.elevation - self.prev_elevation) * self.t_e! --add easing to speed, changes in target! if mode == "arrive" and self.magnitude < self.mvmt_ease then
! ! self.chunk = self.magnitude / (self.mvmt_ease + self.mvmt_hault / 2)! ! self.delta_azimuth = self.delta_azimuth * self.chunk! ! self.delta_elevation = self.delta_elevation * self.chunk! ! self.speed = self.max_speed * self.chunk! elseif mode == "wander" and self.magnitude < self.mvmt_ease then! ! self:set_wtarget()! ! self.speed = 0! else! ! self.speed = self.max_speed! endend
Heis, Muziko Kreito Universo: Project Documentation, 26
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
27/49
function kreito:set_position (t)! self.position_x = t[1]! self.position_y = t[2]! self.position_z = t[3]! u.send("nav"..self.name, "position", t[1], t[2], t[3])endfunction kreito:set_rotate (t)! self.rotate_r = t[1]! self.rotate_x = t[2]! self.rotate_y = t[3]! self.rotate_z = t[4]! u.send("nav"..self.name, "rotate", t[1], t[2], t[3], t[4])end--ai functionsfunction kreito:update ()! self[self.current_state .. "_state"](self)! self:ai_factors_calc()! self:sound_param_calc()! self:color_calc()! if self.current_state ~= "death" then! ! self:death_test()! end! self:update_tweens()
! self:update_delays()! self:send_messages()! self:draw()endfunction kreito:send_messages ()! --u.send("mon"..self.name, self.current_state, self.age, self.health, self.energy) ! u.send("audio"..self.name, self.kreito_type, self.pulse, self.volume, self.frequency,! ! self.overdrive)! u.send("nav"..self.name, "move", 0, 0, self.speed)! u.send("nav"..self.name, "turn", self.delta_azimuth, self.delta_elevation, 0)! u.send("nav"..self.name, 'bang')endfunction kreito:setup_sketch ()! u.sketch:gltranslate(self.position_x, self.position_y, self.position_z)! u.sketch:glrotate(self.rotate_r, self.rotate_x, self.rotate_y, self.rotate_z)! local scale = (2/5 + self.age * 2) * (self.pulse * self.volume + 1)! u.sketch:glscale(scale, scale, scale)! u.sketch:shapeslice(10)endfunction kreito:ai_factors_calc ()! self.age = self.age + u.global_age! local gh = (u.global_health + self.faction_health) * u.time_elapse / 2! local ge = (u.global_energy + self.faction_energy) * u.time_elapse / 2! local decay = self.age * u.slow_rate * u.time_elapse! --calculate health! if self.health > 1 then! ! self.health = 1! else! ! self.health = self.health + self.delta_health + gh - decay! end! --calculate energy
! if self.energy > 1 then! ! self.energy = 1! elseif self.energy < 0 then! ! self.energy = 0! else! ! self.energy = self.energy + self.delta_energy + ge - decay! endendfunction kreito:sound_param_calc ()! --figure out overdrive! if self.current_state == "fight" then
Heis, Muziko Kreito Universo: Project Documentation, 27
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
28/49
! ! self.overdrive = 10! elseif self.current_state == "hunt" then! ! self.overdrive = 5! elseif self.current_state == "flee" then! ! self.overdrive = 3! else self.overdrive = 1! end! --set volume, pitch! self.volume = (self.health * 2/3 + 1/3) * u.volume_table[self.current_state]! self.pitch = self.pitch + self.delta_pitch! if self.pitch < 0 then! ! self.pitch = self.pitch + 12! end! --frequency! self.q_pitch = 2^((self.pitch % 12) / 12)! self.q_age = math.ceil(self.age * 8)! self.frequency = u.age_to_octave[self.q_age] * self.q_pitch! --pulsation! if u.time > self.millis + self.lasttick then! ! self.pulse = 1! ! self.lasttick = u.time! ! self.rate = (1 - self.age + self.energy + self.health) / 3! ! self.millis = (1 - self.rate) * u.time_range + 50
! else! ! self.pulse = 0! endendfunction kreito:color_calc ()! if self.current_state ~= "birth" and self.current_state ~= "death" then! ! self.alpha = self.health * 2/3 +1/3! ! self.saturation = self.energy * 2/3 +1/3! else! ! self.saturation = 0! end! self.color:hsl2rgb(self.hue, self.saturation, self.light)endfunction kreito:change_state (a_state)! self.current_state = a_state! self:add_tween{self.hue, u.color_table[a_state], 500, 'linear', 'hue'}endfunction kreito:death_test ()! if self.health < 0 or self.age > 1 then! ! self:anim_death()! ! self:change_state( "death" )! ! self:add_tween{self.alpha, 0, 2000, 'linear', 'alpha'}! ! self:add_delay{2000, 'terminate'}! endend--tween and delay functionsfunction kreito:add_tween (t)! local tw = u.tween:new()! tw.super = self! tw:set(t)! self.tweens[#self.tweens+1] = tw
endfunction kreito:cancel_tweens ()! while self.tweens[1] do! ! self.tweens[#self.tweens] = nil! endendfunction kreito:update_tweens ()! for i in ipairs(self.tweens) do! ! self.tweens[i]:update()! endend
Heis, Muziko Kreito Universo: Project Documentation, 28
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
29/49
function kreito:add_delay (d)! local de = u.delay:new()! de.super = self! de:set(d)! self.delays[#self.delays+1] = deendfunction kreito:update_delays ()! for i in ipairs(self.delays) do! ! self.delays[i]:update()! endend--ai functionsfunction kreito:birth_state ()! self.delta_health = 0! self.delta_energy = -u.slow_rate * u.time_elapse! self.max_speed = u.stop_rate * u.time_elapse! self.delta_pitch = self:pitch_match(0, false)! --go to follow parent! if self.age > 1/100 then! ! self:anim_move()! ! self:change_state("follow_parent")! endend
function kreito:follow_parent_state ()! if self.age > 1/10 then! ! if self.parent_kreito ~= nil then! ! ! u.remove(self.parent_kreito.children_kreito, self)! ! end! ! self.parent_kreito = nil! end! self.delta_health = 0! self.delta_energy = -u.slow_rate * u.time_elapse! --go to wander! if self.parent_kreito == nil then! ! self.delta_pitch = 0! ! self:anim_move()! ! self:change_state("wander")! else! ! self.delta_pitch = self:pitch_match(self.parent_kreito.pitch, true)! ! self.max_speed = u.run_rate * u.time_elapse! ! self:steer("arrive", self.parent_kreito)! endendfunction kreito:clear_playmates ()! while self.playmates[1] do! ! u.remove(self.playmates[#self.playmates].playmates, self)! ! self.playmates[#self.playmates] = nil! endendfunction kreito:clear_children ()! while self.children_kreito[1] do! ! self.children_kreito[#self.children_kreito].parent_kreito = nil! ! self.children_kreito[#self.children_kreito] = nil! end
endfunction kreito:wander_state ()! self:clear_playmates()! self.delta_health = 0! self.delta_energy = -u.slow_rate * u.time_elapse!! self.max_speed = u.walk_rate * u.time_elapse! self.delta_pitch = self:pitch_match(math.random() * 12, true)! self:steer("wander")! --go to hunt! if self.health < 1/5 then! ! self:anim_flee()
Heis, Muziko Kreito Universo: Project Documentation, 29
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
30/49
! ! self:change_state("hunt")! --go to sleep! elseif self.energy < 1/5 then! ! self:anim_sleep()! ! self:change_state("sleep")! --go to procreate! elseif (self.energy + self.health + self.age) > #u.kreito_types * 8/3 *! ! u.kreitoj_count[self.kreito_type] / u.max_kreitoj then! ! self:anim_procreate()! ! self:change_state("procreate")! ! self:add_delay{5000, 'make_child'}! --go to pursue(playmate)! elseif (self.energy + self.health) > 3/2 then! ! self:anim_flee()! ! self:change_state("pursue")! endendfunction kreito:sleep_state ()! self:clear_playmates()! self.delta_health = 0! self.delta_energy = u.fast_rate * u.time_elapse! self.max_speed = u.stop_rate * u.time_elapse! self.delta_pitch = self:pitch_match(0, true)
! self:mvmt_stop()! --go to wander! if self.energy > 1 then! ! self:anim_move()! ! self:change_state("wander")! endendfunction kreito:pursue_state ()! --go to wander's! if self.energy < 1/4 then! ! self:clear_playmates()! ! self:anim_move()! ! self:change_state("wander")! elseif self.playmates[1] == nil then! ! self:find_playmate()! ! self.delta_pitch = 0! ! self:steer("wander")! else! ! self.delta_pitch = self:pitch_match(self.playmates[1].pitch, false)! ! self:steer("arrive", self.playmates[1])! ! --go to play! ! if self.magnitude < 1/10 then! ! ! self:change_anim_play()! ! ! self:change_state("play")! ! ! self.playmates[1]:change_anim_play()! ! ! self.playmates[1]:change_state("play")! ! end! end! self.delta_health = 0! self.delta_energy = -u.mid_rate * u.time_elapse! self.max_speed = u.run_rate * u.time_elapse
endfunction kreito:find_playmate ()! local bidder! local high_energy = 0! --find the kreito with highest energy in range! for i in pairs(u.kreitoj) do! ! if i ~= self.name and u.kreitoj[i] ~= nil then! ! ! local st = u.kreitoj[i].current_state! ! ! if st == "wander" or st == "pursue" or st == "play" then! ! ! ! local l_x = u.kreitoj[i].position_x - self.position_x! ! ! ! local l_y = u.kreitoj[i].position_y - self.position_y
Heis, Muziko Kreito Universo: Project Documentation, 30
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
31/49
! ! ! ! local l_z = u.kreitoj[i].position_z - self.position_z! ! ! ! local l_m2 = (l_x)^2 + (l_y)^2 + (l_z)^2! ! ! ! if l_m2 < 4096 then --4096 = 64^2! ! ! ! ! local n_energy = u.kreitoj[i].energy! ! ! ! ! if n_energy > high_energy and n_energy > 1/2 then! ! ! ! ! ! bidder = u.kreitoj[i]! ! ! ! ! ! high_energy = n_energy! ! ! ! ! end! ! ! ! end! ! ! end! ! end! end! --set up play relationship! if bidder ~= nil then! ! self.playmates[1] = bidder! ! bidder.playmates[#bidder.playmates+1] = self! ! bidder:change_state("pursue")! endendfunction kreito:play_state ()! --go to wander's! if self.energy < 1/4 then! ! self:clear_playmates()
! ! self:anim_move()! ! self:change_state("wander")! elseif self.playmates[1] == nil then! ! self:anim_move()! ! self:change_state("wander")! else! ! self.delta_health = 0! ! self.delta_energy = -u.fast_rate * u.time_elapse! ! self.max_speed = u.stop_rate * u.time_elapse! ! self.delta_pitch = self:pitch_match(self.playmates[1].pitch, true)! ! self:mvmt_stop()! endendfunction kreito:change_anim_play ()! local r = "anim_play" .. math.ceil(math.random() * 4)! self[r](self)endfunction kreito:procreate_state ()! self.delta_health = -u.fast_rate * u.time_elapse! self.delta_energy = -u.fast_rate * u.time_elapse! self.max_speed = u.stop_rate * u.time_elapse! self.delta_pitch = self:pitch_match(0, false)! self:mvmt_stop()! self:clear_playmates()endfunction kreito:hunt_state ()! self:clear_playmates()! self.delta_health = 0! self.delta_energy = -u.mid_rate * u.time_elapse! self.max_speed = u.run_rate * u.time_elapse! --go to fight
! if self.predator ~= nil then! ! self.prey = nil! ! self.delta_pitch = self:pitch_match(self.predator.pitch, false)! ! self:steer("arrive", self.predator)! ! if self.magnitude < 1/10 then! ! ! self:change_anim_play()! ! ! self:change_state("fight")! ! end! --go to wander! elseif self.prey == nil or self.magnitude > 32 then! ! self:find_prey()
Heis, Muziko Kreito Universo: Project Documentation, 31
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
32/49
! ! self.delta_pitch = 0! ! self:steer("wander")! else! ! self.delta_pitch = self:pitch_match(self.prey.pitch, false)! ! self:steer("arrive", self.prey)! ! --go to fight! ! if self.magnitude < 1/10 then! ! ! self:change_anim_play()! ! ! self:change_state("fight")! ! ! self.prey:decide_provoked(self)! ! end! endendfunction kreito:decide_provoked (pred)! self.predator = pred! --go to fight! if self.health > 1/10 or self.current_state == "hunt" then! ! self:change_anim_play()! ! self:change_state("fight")! --go to flee! else! ! self:anim_flee()! ! self:change_state("flee")
! endendfunction kreito:find_prey ()! local bidder = nil! local low_health = 1! --find kreito with lowest health in range! for i in pairs(u.kreitoj) do! ! if i ~= self.name and u.kreitoj[i] ~= nil then! ! ! local st = u.kreitoj[i].current_state! ! ! if st == "wander" or st == "sleep" or st == "hunt" then! ! ! ! local l_x = u.kreitoj[i].position_x - self.position_x! ! ! ! local l_y = u.kreitoj[i].position_y - self.position_y! ! ! ! local l_z = u.kreitoj[i].position_z - self.position_z! ! ! ! local l_m2 = (l_x)^2 + (l_y)^2 + (l_z)^2! ! ! ! if l_m2 < 16384 then --16384 = 128^2! ! ! ! ! local n_health = u.kreitoj[i].health! ! ! ! ! if n_health < low_health then! ! ! ! ! ! bidder = u.kreitoj[i]! ! ! ! ! ! low_health = n_health! ! ! ! ! end! ! ! ! end! ! ! end! ! end! end! --set up predator and prey relationship! if bidder ~= nil then ! ! self.prey = bidder ! ! if self.prey.current_state == "hunt" then ! ! ! self.prey.predator = self ! ! end! end
endfunction kreito:fight_state ()! self:clear_playmates()! self.delta_health = -u.fast_rate * u.time_elapse! self.delta_energy = -u.fast_rate * u.time_elapse! self.max_speed = u.stop_rate * u.time_elapse! self:mvmt_stop()! --go to chase state! if self.prey ~= nil then! ! self.delta_pitch = self:pitch_match(self.prey.pitch, false)! ! if self.prey.current_state == "flee" then
Heis, Muziko Kreito Universo: Project Documentation, 32
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
33/49
! ! ! self:anim_flee()! ! ! self:change_state("chase")! ! end! --go to flee state! elseif self.predator ~= nil then! ! self.delta_pitch = self:pitch_match(self.predator.pitch, false)! ! if self.health < 1/20 then! ! ! self:anim_flee()! ! ! self:change_state("flee")! ! end! --go to wander state! else! ! self.delta_pitch = 0! ! self:anim_move()! ! self:change_state("wander")! endendfunction kreito:chase_state ()! if self.prey ~= nil then! ! self.delta_pitch = self:pitch_match(self.prey.pitch, false)! ! self.delta_health = -u.fast_rate * u.time_elapse! ! self.delta_energy = -u.fast_rate * u.time_elapse! ! self.max_speed = u.fast_rate * u.time_elapse
! ! self:steer("arrive", self.prey)! -- go to wander state! else! ! self:anim_move()! ! self:change_state("wander")! endendfunction kreito:flee_state ()! self:clear_playmates()! self.delta_health = -u.fast_rate * u.time_elapse! self.delta_energy = -u.fast_rate * u.time_elapse! self.max_speed = u.run_rate * u.time_elapse! if self.predator ~= nil then! ! self.delta_pitch = self:pitch_match(self.predator.pitch, false) ! ! self:steer("flee", self.predator) ! --go to wander state! else! ! self:anim_move()! ! self:change_state("wander")! endendfunction kreito:death_state ()! self.health = 0! self.energy = 0!! self.max_speed = 0! self.delta_pitch = self:pitch_match(0, true)! self:mvmt_stop()endfunction kreito:make_child ()! self:anim_move()! self:change_state("wander")
! --find an empty slot! local childnum = nil! for i = 1, u.max_kreitoj do! ! if u.kreitoj[i] == nil then! ! ! childnum = i! ! ! break! ! end! end! --make a kreito of the correct kind in the empty slot! if childnum ~= nil then! ! u.kreitoj[childnum] = u[self.kreito_type]:new()
Heis, Muziko Kreito Universo: Project Documentation, 33
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
34/49
! ! local c = u.kreitoj[childnum]! ! c:setup()! ! c.name = childnum! ! c.parent_kreito = self! ! self.children_kreito[#self.children_kreito+1] = c! ! c:set_position{self.position_x, self.position_y, self.position_z}! ! c:set_rotate{self.rotate_r, self.rotate_x, self.rotate_y, self.rotate_z}! ! c:add_tween{0, 1, 2000, 'linear', 'alpha'}! endendfunction kreito:terminate ()! self:cancel_tweens()! --end all relationships! self:clear_playmates()! self:clear_children()! if self.predator ~= nil then! ! self.predator.health = 1! ! self.predator.prey = nil! elseif self.prey ~= nil then! ! self.prey.health = 1! ! self.prey.predator = nil! end! --delete this from the great array
! u.kreitoj[self.name] = nilendfunction kreito:pitch_match (t, cd)! local direction = 1! if cd == false then! ! direction = -1! end! if t > self.pitch then! ! return u.pitch_rate * direction! else! ! return -u.pitch_rate * direction! endend
File: kreito_template.lua
a_kreito = {}function a_kreito:setup_faction()! self.kreito_type = "a_kreito"! self.faction_health = x/12 * u.slow_rate! self.faction_energy = 12-x/12 * u.slow_rate! --setup animation parameters! self.tailflip = 0endfunction a_kreito:draw()! --age calculation! u.sketch:glpushmatrix()! self:setup_sketch()! --main! u.sketch:glpopmatrix()endfunction a_kreito:anim_move()! self:cancel_tweens()! --tweens and setsendfunction a_kreito:anim_procreate()! self:cancel_tweens()! --tweens and setsendfunction a_kreito:anim_sleep()! self:cancel_tweens()! --tweens and sets
Heis, Muziko Kreito Universo: Project Documentation, 34
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
35/49
endfunction a_kreito:anim_death()! self:cancel_tweens()! --tweens and setsendfunction a_kreito:anim_flee()! self:cancel_tweens()! --tweens and sets
end--these all end with 'change_anim_play' function callfunction a_kreito:anim_play1()! self:cancel_tweens()! --tweens and setsendfunction a_kreito:anim_play2()! self:cancel_tweens()! --tweens and setsendfunction a_kreito:anim_play3()! self:cancel_tweens()! --tweens and setsendfunction a_kreito:anim_play4()
! self:cancel_tweens()! --tweens and setsendu.a_kreito = u.createClass(kreito, a_kreito)
File: radiuso.lua
--radiusoradiuso = {}function radiuso:setup_faction()! self.kreito_type = "radiuso"! self.faction_health = 8/12 * u.slow_rate! self.faction_energy = 4/12 * u.slow_rate! self.spin = 0! self.radius = 2/3
! self.space = 7/5! self.translate = 1! self.flip = 0! self.outradius = 0! self.tentacles = 1endfunction radiuso:draw()! self.tentacles = self.age * 13! u.sketch:glpushmatrix()! self:setup_sketch()! --head! u.sketch:glcolor(self.color.r, self.color.g, self.color.b, self.alpha)! u.sketch:glpushmatrix()! u.sketch:sphere(1)! u.sketch:glpopmatrix()! --tentacles! u.sketch:glcolor(self.color.r, self.color.g, self.color.b, self.alpha*2/3)! u.sketch:glrotate(self.flip, -1, 0, 0)! u.sketch:gltranslate(0, 0, -self.space * self.translate)! for i = 0, self.tentacles do! ! u.sketch:glpushmatrix()! ! u.sketch:glrotate(self.spin + i * 360 / self.tentacles, 0, 0, 1)! ! u.sketch:gltranslate(0, -self.radius, 0)! ! u.sketch:sphere(1/3)! ! u.sketch:glrotate(self.outradius, -1, 0, -1)! ! u.sketch:gltranslate(0, 0, -self.space)! ! u.sketch:cylinder(1/3, 0, 1)
Heis, Muziko Kreito Universo: Project Documentation, 35
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
36/49
! ! u.sketch:glpopmatrix()! end! u.sketch:glpopmatrix()endfunction radiuso:anim_move()! self:cancel_tweens()! self:add_tween{self.space, 6/5, 500, 'sine', 'space'}! self:add_tween{self.outradius, -10, 500, 'sine', 'outradius', 'open_to_push'}! self.spin = 0! self.radius = 2/3! self.translate = 1! self.flip = 0endfunction radiuso:push_forward()! self:cancel_tweens()! self:add_tween{self.spin, 360, 3000, 'sine', 'spin'}! self:add_tween{self.radius, 2/3, 3000, 'sine', 'radius'}! self:add_tween{self.space, 6/5, 3000, 'sine', 'space'}! self:add_tween{self.outradius, -10, 3000, 'sine', 'outradius', 'open_to_push'}endfunction radiuso:open_to_push()! self:cancel_tweens()! self:add_tween{self.radius, 4/3, 1000, 'sine', 'radius'}
! self:add_tween{self.space, 2, 1000, 'sine', 'space'}! self:add_tween{self.outradius, 30, 1000, 'sine', 'outradius', 'push_forward'}! self.spin = 0endfunction radiuso:anim_procreate()! self:cancel_tweens()! self:add_tween{self.radius, 3/2, 1000, 'sine', 'radius'}! self:add_tween{self.translate, 0, 1000, 'sine', 'translate'}! self:add_tween{self.flip, -90, 1000, 'sine', 'flip'}! self:add_tween{self.outradius, 90, 1000, 'sine', 'outradius', 'anim_procreate_spin'}! self.space = 7/5! self.spin = 0endfunction radiuso:anim_procreate_spin()! self:cancel_tweens()! self:add_tween{0, 360, 750, 'linear', 'spin', 'anim_procreate_spin'}endfunction radiuso:anim_sleep()! self:cancel_tweens()! self:add_tween{self.flip, 90, 1000, 'sine', 'flip'}! self.space = 7/5! self.outradius = 0! self.spin = 0! self.radius = 2/3! self.translate = 1endfunction radiuso:anim_death()! self:cancel_tweens()! self:add_tween{self.flip, -90, 1000, 'sine', 'flip'}! self.space = 7/5! self.outradius = 0
! self.spin = 0! self.radius = 2/3! self.translate = 1endfunction radiuso:anim_flee()! self:cancel_tweens()! self:add_tween{0, 360, 500, 'linear', 'spin', 'anim_flee'}! self.space = 7/5! self.outradius = 0! self.radius = 2/3! self.translate = 1
Heis, Muziko Kreito Universo: Project Documentation, 36
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
37/49
! self.flip = 0endfunction radiuso:anim_play1()! self:cancel_tweens()! self:add_tween{0, 360, 2000, 'sine', 'spin', 'change_anim_play'}! self.space = 7/5! self.outradius = 0! self.radius = 2/3! self.translate = 1! self.flip = 0endfunction radiuso:anim_play2()! self:cancel_tweens()! self:add_tween{self.flip, 180, 1000, 'sine', 'flip'}! self:add_tween{self.radius, 0, 1000, 'sine', 'radius', 'anim_play2_exit'}! self.space = 7/5! self.outradius = 0! self.spin = 0! self.translate = 1endfunction radiuso:anim_play2_exit()! self:cancel_tweens()! self:add_tween{self.flip, 0, 1000, 'sine', 'flip'}
! self:add_tween{self.radius, 2/3, 1000, 'sine', 'radius', 'change_anim_play'}endfunction radiuso:anim_play3()! self:cancel_tweens()! self:add_tween{self.flip, -90, 1000, 'sine', 'flip'}! self:add_tween{self.outradius, 30, 1000, 'sine', 'outradius'}! self:add_tween{0, 360, 1000, 'sine', 'spin', 'anim_play3_exit'}! self.space = 7/5! self.radius = 2/3! self.translate = 1endfunction radiuso:anim_play3_exit()! self:cancel_tweens()! self:add_tween{self.flip, 0, 1000, 'sine', 'flip'}! self:add_tween{self.outradius, 0, 1000, 'sine', 'outradius', 'change_anim_play'}endfunction radiuso:anim_play4()! self:cancel_tweens()! self:add_tween{self.translate, 0, 1000, 'sine', 'translate'}! self:add_tween{self.radius, 3/2, 1000, 'sine', 'radius'}! self:add_tween{self.outradius, 90, 1000, 'sine', 'outradius'}! self:add_tween{self.flip, -45, 1000, 'sine', 'flip'}! self:add_tween{0, 360, 1000, 'linear', 'spin', 'anim_play4_exit'}! self.space = 7/5endfunction radiuso:anim_play4_exit()! self:cancel_tweens()! self:add_tween{self.translate, 1, 1000, 'sine', 'translate'}! self:add_tween{self.radius, 2/3, 1000, 'sine', 'radius'}! self:add_tween{self.outradius, 0, 1000, 'sine', 'outradius'}! self:add_tween{self.flip, 0, 1000, 'sine', 'flip'}
! self:add_tween{0, 360, 1000, 'linear', 'spin', 'change_anim_play'}endu.radiuso = u.createClass(kreito, radiuso)
File: flugilo.lua
--flugiloflugilo = {}function flugilo:setup_faction()! self.kreito_type = "flugilo"! self.faction_health = 9/12 * u.slow_rate
Heis, Muziko Kreito Universo: Project Documentation, 37
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
38/49
! self.faction_energy = 3/12 * u.slow_rate! self.wingflap = 0! self.wingflip = 0! self.tailflip = 0! self.nod = 0! self.neckspace = 1! self.tailspace = 4/5! self.tailjoints = 5! self.wingsperside = 1! self.wingspace = 10! self.tailtwirl = 0endfunction flugilo:draw()! --age! self.tailjoints = self.age * 9 + 1! self.wingsperside = self.age * 5! u.sketch:glpushmatrix()! self:setup_sketch()! u.sketch:glcolor(self.color.r, self.color.g, self.color.b, self.alpha)! --body! u.sketch:glpushmatrix()! u.sketch:glscale(1, 2/3, 1)! u.sketch:cylinder(1/2, 1/2, 2/3)
! u.sketch:glpopmatrix()! --head! u.sketch:glpushmatrix()! u.sketch:gltranslate(0, 0, self.neckspace)! u.sketch:glrotate(self.nod, -1, 0, -1)! u.sketch:gltranslate(0, 0, 1/2)! u.sketch:glscale(1, 2/3, 1)! u.sketch:cylinder(0, 1/2, 2/3)! u.sketch:glpopmatrix()! --wings! u.sketch:glcolor(self.color.r, self.color.g, self.color.b, self.alpha*2/3)! local wingside = {-1, 1}! for k=1, #wingside do! for i=0, self.wingsperside do! ! ! u.sketch:glpushmatrix()! ! ! local _rot = self.wingflip + self.wingspace*(i-self.wingsperside/2) +! ! ! ! wingside[k]*(90+self.wingflap) + 90! ! ! u.sketch:glrotate(90, 0, 1, 0)! ! ! u.sketch:glrotate(_rot, 1, 0, 0)! ! ! u.sketch:glscale(1, 2/3, 1)! ! ! u.sketch:gltranslate(0, 0, 6/5)! ! ! u.sketch:cylinder(0, 1/2, 2/3)! ! ! u.sketch:glpopmatrix()! end end! --tail! u.sketch:glcolor(self.color.r, self.color.g, self.color.b, self.alpha/3)! u.sketch:gltranslate(0, 0, -11/10)! for i=0, self.tailjoints do! ! ! u.sketch:glpushmatrix()! ! ! u.sketch:glrotate(self.delta_azimuth * 4 * i, 0, -1, 0)! ! ! u.sketch:glrotate(self.delta_elevation * 4 * i, -1, 0, 0)
! ! ! u.sketch:glrotate(self.tailflip * i, -1, 0 ,-1)! ! ! u.sketch:glrotate(self.tailtwirl * i / 2, 0, 1, 1)! ! ! u.sketch:gltranslate(0, 0, -self.tailspace*i)! ! ! u.sketch:sphere(1/3)! ! ! u.sketch:glpopmatrix()! end! u.sketch:glpopmatrix()endfunction flugilo:anim_move()! self:cancel_tweens()! self:flap_wings()
Heis, Muziko Kreito Universo: Project Documentation, 38
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
39/49
! self.wingflip = 0! self.tailflip = 0! self.nod = 0! self.neckspace = 1! self.tailtwirl = 0endfunction flugilo:flap_wings()! self:cancel_tweens()! self:add_tween{self.wingflap, -45, 1000, 'sine', 'wingflap', 'flap_wings_up'}endfunction flugilo:flap_wings_up()! self:cancel_tweens()! self:add_tween{-45, 45, 1000, 'sine', 'wingflap', 'flap_wings'}endfunction flugilo:anim_procreate()! self:cancel_tweens()! self:add_tween{self.nod, -15, 1000, 'sine', 'nod'}! self:add_tween{0, 360, 1000, 'linear', 'wingflip'}! self:add_tween{0, 720, 1000, 'linear', 'tailtwirl', 'anim_procreate_up'}! self.wingflap = 0! self.tailflip = 0! self.neckspace = 1end
function flugilo:anim_procreate_up()! self:cancel_tweens()! self:add_tween{-15,15,1000,'sine','nod'}! self:add_tween{0,360,1000,'linear','wingflip'}! self:add_tween{0,720,1000, 'linear', 'tailtwirl', 'anim_procreate'}endfunction flugilo:anim_sleep()! self:cancel_tweens()! self:add_tween{self.wingflap, -15, 1000, 'sine', 'wingflap'}! self:add_tween{self.nod, -15, 1000, 'sine', 'nod'}! self:add_tween{self.tailflip, 15, 1000, 'sine', 'tailflip'}! self.wingflip = 0! self.neckspace = 1! self.tailtwirl = 0endfunction flugilo:anim_death()! self:cancel_tweens()! self:add_tween{self.wingflap, -90, 1000, 'sine', 'wingflap'}! self:add_tween{self.nod, -30, 1000, 'sine', 'nod'}! self:add_tween{self.tailflip, 30, 1000, 'sine', 'tailflip'}! self.wingflip = 0! self.nod = 0! self.neckspace = 1! self.tailtwirl = 0endfunction flugilo:anim_flee()! self:cancel_tweens()! self:add_tween{0, 360, 750, 'linear', 'wingflip'}! self:add_tween{0, 720, 750, 'linear', 'tailtwirl', 'anim_flee'}! self.wingflap = 0! self.tailflip = 0
! self.nod = 0! self.neckspace = 1endfunction flugilo:anim_play1()! self:cancel_tweens()! self:add_tween{0, 720, 2000, 'linear', 'tailtwirl', 'change_anim_play'}! self.wingflap = 0! self.wingflip = 0! self.tailflip = 0! self.nod = 0! self.neckspace = 1
Heis, Muziko Kreito Universo: Project Documentation, 39
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
40/49
endfunction flugilo:anim_play2()! self:cancel_tweens()! self:add_tween{self.neckspace, 7/5, 1000, 'sine', 'neckspace', 'anim_play2_exit'}! self.wingflap = 0! self.wingflip = 0! self.tailflip = 0! self.nod = 0! self.tailtwirl = 0endfunction flugilo:anim_play2_exit()! self:cancel_tweens()! self:add_tween{self.neckspace, 1, 1000, 'sine', 'neckspace', 'change_anim_play'}endfunction flugilo:anim_play3()! self:cancel_tweens()! self:add_tween{self.wingflap, 90, 1000, 'sine', 'wingflap', 'anim_play3_exit'}! self.wingflip = 0! self.tailflip = 0! self.nod = 0! self.neckspace = 1! self.tailtwirl = 0end
function flugilo:anim_play3_exit()! self:cancel_tweens()! self:add_tween{self.wingflap, 0, 1000, 'sine', 'wingflap', 'change_anim_play'}endfunction flugilo:anim_play4()! self:cancel_tweens()! self:add_tween{self.tailflip, -45, 1000, 'sine', 'tailflip', 'anim_play4_exit'}! self.wingflap = 0! self.wingflip = 0! self.nod = 0! self.neckspace = 1! self.tailtwirl = 0endfunction flugilo:anim_play4_exit()! self:cancel_tweens()! self:add_tween{self.tailflip, 0, 1000, 'sine', 'tailflip', 'change_anim_play'}endu.flugilo = u.createClass(kreito, flugilo)
File: konko.lua
--konkokonko = {}function konko:setup_faction()! self.kreito_type = "konko"! self.faction_health = 3/12 * u.slow_rate! self.faction_energy = 9/12 * u.slow_rate! self.radius = 2/3! self.feet = 3! self.spin = 0! self.coneflip = 0! self.feetflip = 0! self.coneradius = 10! self.conespin = 0! self.feettrans = 1endfunction konko:draw()! --age! self.feet = self.age * 9 + 1! u.sketch:glpushmatrix()! self:setup_sketch()! --head
Heis, Muziko Kreito Universo: Project Documentation, 40
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
41/49
! u.sketch:glcolor(self.color.r, self.color.g, self.color.b, self.alpha)! u.sketch:glpushmatrix()! u.sketch:sphere(2/3)! u.sketch:glpopmatrix()! --shell! u.sketch:glpushmatrix()! u.sketch:glrotate(self.coneflip, -1, 0, 0)! u.sketch:glrotate(self.conespin, 0, self.coneradius, -1)! u.sketch:gltranslate(0, 5/2, 0)! u.sketch:glrotate(90, 1, 0, 0)! u.sketch:cylinder(2/3, 0, 9/5)! u.sketch:glpopmatrix()! --feet! u.sketch:glrotate(self.feetflip, -1, 0, 0)! u.sketch:gltranslate(0, -self.feettrans, 0)! u.sketch:glcolor(self.color.r, self.color.g, self.color.b, self.alpha * 2 / 3)! for i=0, self.feet do! ! u.sketch:glpushmatrix()! ! u.sketch:glrotate(self.spin + i * 360 / self.feet, 0, -self.radius, 0)! ! u.sketch:gltranslate(0, 0, self.radius)! ! u.sketch:sphere(1/3)! ! u.sketch:glpopmatrix()! end
! u.sketch:glpopmatrix()endfunction konko:anim_move()! self:cancel_tweens()! self:add_tween{self.coneflip, 15, 1000, 'sine', 'coneflip'}! self:add_tween{self.feetflip, -15, 1000, 'sine', 'feetflip', 'spin_feet'}! self.radius = 2/3! self.spin = 0! self.conespin = 0! self.feettrans = 1endfunction konko:spin_feet()! self:cancel_tweens()! self:add_tween{0, 360, 1000, 'linear', 'spin', 'spin_feet'}!endfunction konko:twirl_cone()! self:cancel_tweens()! self:add_tween{0, 360, 1000, 'linear', 'conespin', 'twirl_cone'}endfunction konko:spin_and_twirl()! self:cancel_tweens()! self:add_tween{0, 360, 1000, 'linear', 'spin'}!! self:add_tween{0, 360, 1000, 'linear', 'conespin', 'spin_and_twirl'}endfunction konko:anim_procreate()! self:cancel_tweens()! self:add_tween{self.feettrans, 0, 1000, 'sine', 'feettrans'}! self:add_tween{self.radius, 6/5, 1000, 'sine', 'radius', 'spin_and_twirl'}! self.spin = 0! self.coneflip = 0! self.feetflip = 0
! self.conespin = 0endfunction konko:anim_sleep()! self:cancel_tweens()! self:add_tween{self.coneflip, 90, 1000, 'sine', 'coneflip'}! self.radius = 2/3! self.spin = 0! self.feetflip = 0! self.conespin = 0! self.feettrans = 1end
Heis, Muziko Kreito Universo: Project Documentation, 41
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
42/49
function konko:anim_death()! self:cancel_tweens()! self:add_tween{self.coneflip, 180, 1000, 'sine', 'coneflip'}! self:add_tween{self.feetflip, -180, 1000, 'sine', 'feetflip'}! self.radius = 2/3! self.spin = 0! self.conespin = 0! self.feettrans = 1
endfunction konko:anim_flee()! self:cancel_tweens()! self:add_tween{self.coneflip, 90, 1000, 'sine', 'coneflip'}! self:add_tween{self.feetflip, -90, 1000, 'sine', 'feetflip'}! self:add_tween{self.radius, 1, 1000, 'sine', 'radius', 'spin_and_twirl'}! self.spin = 0! self.conespin = 0! self.feettrans = 1endfunction konko:anim_play1()! self:cancel_tweens()! self:add_tween{0, 360, 2000, 'linear', 'conespin'}! self:add_tween{self.coneflip, 15, 2000, 'sine', 'coneflip', 'change_anim_play'}! self.radius = 2/3
! self.spin = 0! self.feetflip = 0! self.conespin = 0! self.feettrans = 1endfunction konko:anim_play2()! self:cancel_tweens()! self:add_tween{self.feetflip, 90, 2000, 'sine', 'feetflip', 'change_anim_play'}! self.radius = 2/3! self.spin = 0! self.coneflip = 0! self.conespin = 0! self.feettrans = 1endfunction konko:anim_play3()! self:cancel_tweens()! self:add_tween{0, 360, 1000, 'linear', 'spin'}! self:add_tween{self.feettrans, 0, 1000, 'sine', 'feettrans'}! self:add_tween{self.radius, 6/5, 1000, 'sine', 'radius', 'anim_play3_exit'}! self.spin = 0! self.coneflip = 0! self.feetflip = 0! self.conespin = 0endfunction konko:anim_play3_exit()! self:cancel_tweens()! self:add_tween{0, 360, 1000, 'linear', 'spin'}! self:add_tween{self.feettrans, 1, 1000, 'sine', 'feettrans'}! self:add_tween{self.radius, 2/3, 1000, 'sine', 'radius', 'change_anim_play'}endfunction konko:anim_play4()
! self:cancel_tweens()! self:add_tween{self.radius, -2/3, 1000, 'sine', 'radius', 'anim_play4_exit'}! self.spin = 0! self.coneflip = 0! self.feetflip = 0! self.conespin = 0! self.feettrans = 1endfunction konko:anim_play4_exit()! self:cancel_tweens()! self:add_tween{self.radius, 2/3, 1000, 'sine', 'radius', 'change_anim_play'}
Heis, Muziko Kreito Universo: Project Documentation, 42
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
43/49
endu.konko = u.createClass(kreito, konko)
File: streko.lua
--strekostreko = {}
function streko:setup_faction()! self.kreito_type = "streko"! self.faction_health = 11/12 * u.slow_rate! self.faction_energy = 1/12 * u.slow_rate! self.tailflip = 0! self.nod = 0! self.neckspace = 1! self.tailspace = 8/5! self.tailjoints = 5! self.orbit = 0! self.tailtwirl = 0endfunction streko:draw()! --age! self.tailjoints = self.age * 12 + 1! u.sketch:glpushmatrix()! self:setup_sketch()! --main! for i=0, self.tailjoints do ! ! if i < 5 then! ! ! u.sketch:glcolor(self.color.r, self.color.g, self.color.b,! ! ! ! self.alpha*(6-i)/6)! ! else! ! ! u.sketch:glcolor(self.color.r, self.color.g, self.color.b, self.alpha/3)! ! end! ! u.sketch:glpushmatrix()! ! if i == 0 then! ! ! u.sketch:glrotate(self.nod, 0, 1, 0)! ! ! u.sketch:gltranslate(0, 0, self.neckspace - 1/2)! ! else! ! ! u.sketch:glrotate(self.delta_azimuth * 4 * i, 0, -1, 0)
! ! ! u.sketch:glrotate(self.delta_elevation * 4 * i, -1, 0, 0)! ! ! u.sketch:glrotate(self.tailflip * i, -1, 0 ,-1)! ! ! u.sketch:glrotate(self.tailtwirl * i / 2, 0, 1, 1)! ! ! u.sketch:glrotate(self.orbit * i, 0, 1, 0)! ! end! ! u.sketch:gltranslate(0, 0, -self.tailspace * i)! ! if i < 5 then! ! ! u.sketch:sphere((6-i)/6)! ! else! ! ! u.sketch:sphere(1/3)! ! end! ! u.sketch:glpopmatrix()! end! u.sketch:glpopmatrix()endfunction streko:anim_move()! self:cancel_tweens()! self.orbit = 0! self.tailflip = 0! self.nod = 0! self.neckspace = 1! self.tailtwirl = 0endfunction streko:anim_procreate()! self:cancel_tweens()! self:add_tween{self.nod, -15, 1000, 'sine', 'nod'}! self:add_tween{0, 360, 1000, 'linear', 'orbit'}
Heis, Muziko Kreito Universo: Project Documentation, 43
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
44/49
! self:add_tween{0, 720, 1000, 'linear', 'tailtwirl', 'anim_procreate_up'}! self.tailflip = 0! self.neckspace = 1endfunction streko:anim_procreate_up()! self:cancel_tweens()! self:add_tween{-15,15,1000,'sine','nod'}! self:add_tween{0,360,1000,'linear','orbit'}! self:add_tween{0,720,1000, 'linear', 'tailtwirl', 'anim_procreate'}endfunction streko:anim_sleep()! self:cancel_tweens()! self:add_tween{self.nod, -15, 1000, 'sine', 'nod'}! self:add_tween{self.tailflip, 15, 1000, 'sine', 'tailflip'}! self.orbit = 0! self.neckspace = 1! self.tailtwirl = 0endfunction streko:anim_death()! self:cancel_tweens()! self:add_tween{self.nod, -30, 1000, 'sine', 'nod'}! self:add_tween{self.tailflip, 30, 1000, 'sine', 'tailflip'}! self.orbit = 0
! self.nod = 0! self.neckspace = 1! self.tailtwirl = 0endfunction streko:anim_flee()! self:cancel_tweens()! self:add_tween{0, 720, 750, 'linear', 'tailtwirl', 'anim_flee'}! self.orbit = 0! self.tailflip = 0! self.nod = 0! self.neckspace = 1endfunction streko:anim_play1()! self:cancel_tweens()! self:add_tween{0, 720, 2000, 'linear', 'tailtwirl', 'change_anim_play'}! self.orbit = 0! self.tailflip = 0! self.nod = 0! self.neckspace = 1endfunction streko:anim_play2()! self:cancel_tweens()! self:add_tween{self.neckspace, 7/5, 1000, 'sine', 'neckspace', 'anim_play2_exit'}! self.orbit = 0! self.tailflip = 0! self.nod = 0! self.tailtwirl = 0endfunction streko:anim_play2_exit()! self:cancel_tweens()! self:add_tween{self.neckspace, 1, 1000, 'sine', 'neckspace', 'change_anim_play'}
endfunction streko:anim_play3()! self:cancel_tweens()! self:add_tween{0, 360, 2000, 'linear', 'orbit', 'change_anim_play'}! self.tailflip = 0! self.nod = 0! self.neckspace = 1! self.tailtwirl = 0endfunction streko:anim_play4()! self:cancel_tweens()
Heis, Muziko Kreito Universo: Project Documentation, 44
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
45/49
! self:add_tween{self.tailflip, -45, 1000, 'sine', 'tailflip', 'anim_play4_exit'}! self.orbit = 0! self.nod = 0! self.neckspace = 1! self.tailtwirl = 0endfunction streko:anim_play4_exit()! self:cancel_tweens()! self:add_tween{self.tailflip, 0, 1000, 'sine', 'tailflip', 'change_anim_play'}endu.streko = u.createClass(kreito, streko)
File: drivo.lua
drivo = {}function drivo:setup_faction()! self.kreito_type = "drivo"! self.faction_health = 1/12 * u.slow_rate! self.faction_energy = 11/12 * u.slow_rate! --setup animation parameters! self.headspin = 0! self.neckspace = 0! self.armspin = 0! self.legspin = 0! self.armsforback = 0! self.legsforback = 0! self.armfan = 0! self.legfan = 0! self.armspace = 1! self.legspace = 1/3endfunction drivo:draw()! --age calculation! self.arms = self.age * 4 + 1! self.legs = self.age * 8 + 1! u.sketch:glpushmatrix()! self:setup_sketch()! --body
! u.sketch:glcolor(self.color.r, self.color.g, self.color.b, self.alpha)! u.sketch:glpushmatrix()! u.sketch:glrotate(90, 1, 0, 0)! u.sketch:glscale(1, 2/3, 1)! u.sketch:cylinder(1/2, 1/2, 1/2)! u.sketch:glpopmatrix()! --head! u.sketch:glpushmatrix()! u.sketch:gltranslate(0, 1, 0)! u.sketch:glrotate(self.headspin, 0, 1, 0)! u.sketch:gltranslate(0, 0, self.neckspace)! u.sketch:sphere(1/2)! u.sketch:glpopmatrix()! --arms! u.sketch:glcolor(self.color.r, self.color.g, self.color.b, self.alpha * 2/3)! u.sketch:glpushmatrix()! u.sketch:glrotate(self.armsforback, 1, 0, 0)! u.sketch:gltranslate(0, 1/2, 0)! for i=0, self.arms do! ! u.sketch:glpushmatrix()! ! u.sketch:glrotate(i * 360 / (self.arms + 1) + self.armspin - 90, 0, 1, 0)! ! u.sketch:gltranslate(0, 0, self.armspace-1/4)! ! u.sketch:glrotate(self.armfan, 1, 0, 0)! ! u.sketch:gltranslate(0, 0, 1/4)! ! u.sketch:cylinder(0, 1/4, 1/2)! ! u.sketch:glpopmatrix()! end
Heis, Muziko Kreito Universo: Project Documentation, 45
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
46/49
! u.sketch:glpopmatrix()! --legs! u.sketch:glpushmatrix()! u.sketch:glrotate(self.legsforback, 1, 0, 0)! u.sketch:gltranslate(0, -3/4, 0)! for i=0, self.legs do! ! u.sketch:glpushmatrix()! ! u.sketch:glrotate(i * 360 / (self.legs + 1) - 90 + self.legspin, 0, 1, 0)! ! u.sketch:gltranslate(0, 0, self.legspace)! ! u.sketch:glrotate(self.legfan, 1, 0, 0)! ! u.sketch:gltranslate(0, -1/4, 0)! ! u.sketch:glrotate(-90, 1, 0, 0)! ! u.sketch:cylinder(1/4, 0, 1/2)! ! u.sketch:glpopmatrix()! end! u.sketch:glpopmatrix()! --close! u.sketch:glpopmatrix()endfunction drivo:anim_move()! self:cancel_tweens()! --tweens and sets! if self.armfan > 0 then
! ! self:add_tween{self.armfan, -15, 1000, 'sine', 'armfan'}! else! ! self:add_tween{self.armfan, 15, 1000, 'sine', 'armfan'}! end! if self.legsforback < 29 then! ! self:add_tween{self.legsforback, 30, 500, 'sine', 'legsforback'}! else! ! self.legsforback = 30! end! self:add_tween{0, 360, 1000, 'linear', 'legspin', 'anim_move'}! self.armsforback = 0! self.headspin = 0! self.neckspace = 0! self.armspin = 0! self.legfan = 0! self.armspace = 1! self.legspace = 1/3endfunction drivo:anim_procreate()! self:cancel_tweens()! --tweens and sets! if self.armfan > 0 then! ! self:add_tween{self.armfan, -30, 500, 'sine', 'armfan'}! else! ! self:add_tween{self.armfan, 30, 500, 'sine', 'armfan'}! end! if self.legfan > 0 then! ! self:add_tween{self.legfan, -30, 500, 'sine', 'legfan'}! else! ! self:add_tween{self.legfan, 30, 500, 'sine', 'legfan'}! end
! if self.neckspace < 9/10 then! ! self:add_tween{self.neckspace, 1, 500, 'sine', 'neckspace'}! else! ! self.neckspace = 1! end! self:add_tween{0, 360, 500, 'linear', 'headspin'}! self:add_tween{0, 360, 500, 'linear', 'armspin'}! self:add_tween{0, 360, 500, 'linear', 'legspin', 'anim_procreate'}! self.armsforback = 0! self.legsforback = 0! self.armspace = 1
Heis, Muziko Kreito Universo: Project Documentation, 46
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
47/49
! self.legspace = 1/3endfunction drivo:anim_sleep()! self:cancel_tweens()! --tweens and sets! self.headspin = 0! self.neckspace = 0! self.armspin = 0! self.legspin = 0! self.armsforback = 0! self.legsforback = 0! self:add_tween{self.armfan, -45, 1000, 'sine', 'armfan'}! self:add_tween{self.legfan, 45, 1000, 'sine', 'legfan'}! self.armspace = 1! self.legspace = 1/3endfunction drivo:anim_death()! self:cancel_tweens()! --tweens and sets! self.headspin = 0! self.neckspace = 0! self.armspin = 0! self.legspin = 0
! self.armsforback = 0! self.legsforback = 0! self:add_tween{self.armfan, -90, 1000, 'sine', 'armfan'}! self:add_tween{self.legfan, 90, 1000, 'sine', 'legfan'}! self:add_tween{self.armspace, 0, 1000, 'sine', 'armspace'}! self:add_tween{self.legspace, 0, 1000, 'sine', 'armspace'}endfunction drivo:anim_flee()! self:cancel_tweens()! --tweens and sets! if self.armsforback < 89 then! ! self:add_tween{self.armsforback, -90, 500, 'sine', 'armsforback'}! else! ! self.armsforback = -90! end! if self.legsforback < 89 then! ! self:add_tween{self.legsforback, 90, 500, 'sine', 'legsforback'}! else! ! self.legsforback = 90! end! if self.armfan < 89 then! ! self:add_tween{self.armfan, 90, 500, 'sine', 'armfan'}! else! ! self.armfan = 90! end! self:add_tween{0, 360, 500, 'linear', 'armspin'}! self:add_tween{0, 360, 500, 'linear', 'legspin', 'anim_flee'}! self.headspin = 0! self.neckspace = 0! self.legfan = 0! self.armspace = 1
! self.legspace = 1/3end--these all end with 'change_anim_play' function callfunction drivo:anim_play1()! self:cancel_tweens()! --tweens and sets! if self.neckspace < 2/5 then! ! self:add_tween{self.neckspace, 1/2, 1000, 'sine', 'neckspace'}! else! ! self:add_tween{self.neckspace, 0, 1000, 'sine', 'neckspace'}! end
Heis, Muziko Kreito Universo: Project Documentation, 47
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
48/49
! self:add_tween{0, 360, 2000, 'linear', 'headspin', 'change_anim_play'}! self.armspin = 0! self.legspin = 0! self.armsforback = 0! self.legsforback = 0! self.armfan = 0! self.legfan = 0! self.armspace = 1! self.legspace = 1/3endfunction drivo:anim_play2()! self:cancel_tweens()! --tweens and sets! self.headspin = 0! self.neckspace = 0! self:add_tween{0, 360, 2000, 'linear', 'armspin', 'change_anim_play'}! self.legspin = 0! self.armsforback = 0! self.legsforback = 0! self.armfan = 0! self.legfan = 0! self.armspace = 1! self.legspace = 1/3
endfunction drivo:anim_play3()! self:cancel_tweens()! --tweens and sets! self.headspin = 0! self.neckspace = 0! self.armspin = 0! self:add_tween{0, 360, 2000, 'linear', 'legspin', 'change_anim_play'}! self.armsforback = 0! self.legsforback = 0! self.armfan = 0! self.legfan = 0! self.armspace = 1! self.legspace = 1/3endfunction drivo:anim_play4()! self:cancel_tweens()! --tweens and sets! self.headspin = 0! self.neckspace = 0! self:add_tween{0, 360, 2000, 'linear', 'armspin', 'change_anim_play'}! self.legspin = 0! self.armsforback = 0! self.legsforback = 0! if self.armfan < 89 then! ! self:add_tween{self.armfan, 90, 1000, 'sine', 'armfan'}! else! ! self:add_tween{self.armfan, 0, 1000, 'sine', 'armfan'}! end! self.legfan = 0! self.armspace = 1
! self.legspace = 1/3endu.drivo = u.createClass(kreito, drivo)
Heis, Muziko Kreito Universo: Project Documentation, 48
-
8/9/2019 Muziko Kreito Universo Documentation & Source Code
49/49
File: mku_c74.txt
clearbrgb 0. 0. 0. 1.hslider healthSlider 25 25 270 80bgcolor healthSlider 1. 0.67 0.67 1.comment healthLabel 25 105 HEALTH
textcolor healthLabel 1. 1. 1. 1.comment healthPointer 156 105 textcolor healthPointer 1. 1. 1. 1.hslider energySlider 25 165 270 80bgcolor energySlider 0.67 1. 0.67 1.comment energyLabel 25 245 ENERGYtextcolor energyLabel 1. 1. 1. 1.comment energyPointer 156 245 textcolor energyPointer 1. 1. 1. 1.toggle activeToggle 25 305 80bgcolor activeToggle 0.67 0.5 1. 1.comment activeLabel 25 385 ACTIVEtextcolor activeLabel 1. 1. 1. 1.button homeButton 215 305 80bgcolor homeButton 0.67 1. 1. 1.comment homeLabel 215 385 HOME
textcolor homeLabel 1. 1. 1. 1.set healthSlider 0.5set energySlider 0.5set activeToggle 1.bordercolor healthSlider 1. 1. 1. 1.bordercolor energySlider 1. 1. 1. 1.bordercolor activeToggle 1. 1. 1. 1.bordercolor homeButton 1. 1. 1. 1.
Heis, Muziko Kreito Universo: Project Documentation, 49