Creative Computer Programming: Fraus Asami
Illustrating demons within a Dantean space inspired me to create a demonic leader for each circle of hell. Fraus, the leader of the eighth circle, is particularly important to our creative writing with their troublemaking. In our alternate universes (AUs) my character, Asami, often gets caught up with this demon in some way or another.
Fraus looks something like this. The design has changed over time.
And Asami, one of a pair of twins, takes on different forms depending which incarnation he is in.
(Based on Cabanel's Fallen Angel).
In one AU, Fraus takes over Asami's body during a battle between our characters. It is important to mention that Fraus is a demon that handles plant matter, hence the storybook-like setting of this still:
I decided to animate this pop-up book-esque drawing to create a sense of wind and crawling magic. Once again, it is a WinForms Visual Basic app.
Code here:
Public Class Form1
Private frausAndLines As Image
Private frausAsamiBackground As Image
Private leafSmall() As Image
Private leafMedium() As Image
Private leafLarge() As Image
Private leafSmallXPos() As Single
Private leafMediumXPos() As Single
Private leafLargeXPos() As Single
Private leafSmallYPos() As Single
Private leafMediumYPos() As Single
Private leafLargeYPos() As Single
Private leafSmallSpeed() As Single
Private leafMediumSpeed() As Single
Private leafLargeSpeed() As Single
Private curveSlowerDowner() As Single
Private dropletSmall() As Image
Private dropletLarge() As Image
Private dropletSmallXPos() As Single
Private dropletSmallYPos() As Single
Private dropletLargeXPos() As Single
Private dropletLargeYPos() As Single
Private dropletSmallSpeed() As Single
Private dropletLargeSpeed() As Single
Private frameCount = 60
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer1.Enabled = True
Timer1.Interval = 33
Timer1.Start()
ReDim leafSmall(20)
ReDim leafMedium(20)
ReDim leafLarge(20)
ReDim leafSmallXPos(50)
ReDim leafMediumXPos(50)
ReDim leafLargeXPos(50)
ReDim leafSmallYPos(50)
ReDim leafMediumYPos(50)
ReDim leafLargeYPos(50)
ReDim leafSmallSpeed(50)
ReDim leafMediumSpeed(50)
ReDim leafLargeSpeed(50)
ReDim curveSlowerDowner(50)
ReDim dropletSmall(10)
ReDim dropletLarge(10)
ReDim dropletSmallXPos(10)
ReDim dropletSmallYPos(10)
ReDim dropletLargeXPos(10)
ReDim dropletLargeYPos(10)
ReDim dropletSmallSpeed(10)
ReDim dropletLargeSpeed(10)
frausAsamiBackground = Bitmap.FromFile("C:\Users\genev\Pictures\arts\fraus asami background.png")
For n = 0 To 19
leafSmallXPos(n) = 540
leafMediumXPos(n) = 536
leafLargeXPos(n) = 550
leafSmallYPos(n) = 461 * Rnd() + 40
leafMediumYPos(n) = 461 * Rnd() + 40
leafLargeYPos(n) = 461 * Rnd() + 40
leafSmallSpeed(n) = 6 * Rnd() - 20
leafMediumSpeed(n) = 6 * Rnd() - 20
leafLargeSpeed(n) = 6 * Rnd() - 20
leafSmall(n) = Bitmap.FromFile("C:\Users\genev\Pictures\arts\leaf small.png")
leafMedium(n) = Bitmap.FromFile("C:\Users\genev\Pictures\arts\leaf medium.png")
leafLarge(n) = Bitmap.FromFile("C:\Users\genev\Pictures\arts\leaf large.png")
curveSlowerDowner(n) = (51 * Rnd() + 25)
Next
frausAndLines = Bitmap.FromFile("C:\Users\genev\Pictures\arts\fraus asami lines and fraus.png")
For v = 0 To 9
dropletSmallXPos(v) = 1001 * Rnd()
dropletSmallYPos(v) = 822
dropletLargeXPos(v) = 1001 * Rnd()
dropletLargeYPos(v) = 976
dropletSmallSpeed(v) = 2 * Rnd() - 2
dropletLargeSpeed(v) = 2 * Rnd() - 2
dropletSmall(v) = Bitmap.FromFile("C:\Users\genev\Pictures\arts\droplet small.png")
dropletLarge(v) = Bitmap.FromFile("C:\Users\genev\Pictures\arts\droplet large.png")
curveSlowerDowner(v) = (51 * Rnd() + 25)
Next
End Sub
Private Sub Label1_Paint(sender As Object, e As PaintEventArgs) Handles Label1.Paint
frameCount += 1
Dim gr0 = e.Graphics
gr0.DrawImage(frausAsamiBackground, 0, 0, 1000, 1000)
For n = 0 To 19
leafSmallXPos(n) = leafSmallXPos(n) + leafSmallSpeed(n)
leafSmallYPos(n) = leafSmallYPos(n) + Math.Sin(frameCount / curveSlowerDowner(n))
leafMediumXPos(n) = leafMediumXPos(n) + leafMediumSpeed(n)
leafMediumYPos(n) = leafMediumYPos(n) + Math.Sin(frameCount / curveSlowerDowner(n))
leafLargeXPos(n) = leafLargeXPos(n) + leafLargeSpeed(n)
leafLargeYPos(n) = leafLargeYPos(n) + Math.Sin(frameCount / curveSlowerDowner(n))
If leafSmallXPos(n) < -13 Then
leafSmallXPos(n) = 536
End If
If leafMediumXPos(n) < -12 Then
leafMediumXPos(n) = 536
End If
If leafLargeXPos(n) < -48 Then
leafLargeXPos(n) = 536
End If
gr0.DrawImage(leafSmall(n), leafSmallXPos(n), leafSmallYPos(n), 13, 7)
gr0.DrawImage(leafMedium(n), leafMediumXPos(n), leafMediumYPos(n), 12, 11)
gr0.DrawImage(leafLarge(n), leafLargeXPos(n), leafLargeYPos(n), 48, 13)
Next
gr0.DrawImage(frausAndLines, 0, 0, 1000, 1000)
For v = 0 To 9
dropletSmallXPos(v) = dropletSmallXPos(v) + Math.Sin(frameCount / curveSlowerDowner(v))
dropletSmallYPos(v) = dropletSmallYPos(v) + dropletSmallSpeed(v)
dropletLargeXPos(v) = dropletLargeXPos(v) + Math.Sin(frameCount / curveSlowerDowner(v))
dropletLargeYPos(v) = dropletLargeYPos(v) + dropletLargeSpeed(v)
If dropletSmallYPos(v) < -13 Then
dropletSmallYPos(v) = 822
End If
If dropletLargeYPos(v) < -21 Then
dropletLargeYPos(v) = 976
End If
gr0.DrawImage(dropletSmall(v), dropletSmallXPos(v), dropletSmallYPos(v), 13, 13)
gr0.DrawImage(dropletLarge(v), dropletLargeXPos(v), dropletLargeYPos(v), 19, 21)
Next
End Sub
Private Sub Label1_DoubleClick(sender As Object, e As EventArgs) Handles Label1.DoubleClick
Me.Close()
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Label1.Invalidate()
End Sub
End Class








