' Sorry, there are several declaration and portions of code
' that are not used in this version. They are used in
' a version of the code for VBA in Microsoft Access.
' I'm wasting too much time trying to support 2 versions
' specific for each environment. So if you like, help
' yourself and commment out the unused stuff.
' Animated Gif Class Module
'Copyright Lebans Holdings 1999 Ltd.
'You may freely use and redistribute this code providing
'the one line copyright notice is left intact.
'You may not resell this code as part of a collection or by itself.
'Please feel free to use this code within your own applications,
'whether private or commercial, without cost.
'Contact Stephen@lebans.com or visit www.lebans.com"
' Declare our structures for this module
Private Type RECTL
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type SIZEL
cx As Long
cy As Long
End Type
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type PALETTEENTRY
peRed As Byte
peGreen As Byte
peBlue As Byte
peFlags As Byte
End Type
Private Type LOGPALETTE
palVersion As Integer
palNumEntries As Integer
palPalEntry(1) As PALETTEENTRY
End Type
Private Type RGBQUAD
RGBBlue As Byte
RGBGreen As Byte
RGBRed As Byte
rgbReserved As Byte
End Type
Private Type BITMAP
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type
Private Type BITMAPINFOHEADER '40 bytes
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type
Private Const NUMPICCOLORS = 255
Private Type BITMAPINFO256
bmiHeader As BITMAPINFOHEADER
bmiColors(255) As RGBQUAD ' 8 bit RGB
End Type
Private Type BITMAPINFO2
bmiHeader As BITMAPINFOHEADER
bmiColors(0 To 1) As RGBQUAD ' 2 Color RGB
End Type
Private Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
' No Colors 24 bit RGB
End Type
' Below reTyped - easier to write
Private Type BITMAPFILEHEADER '14 bytes
bfType As Integer
bfSize(3) As Byte 'Long
'bfSize As Long
bfReserved1 As Integer
bfReserved2 As Integer
'bfOffBits As Long
bfOffBits(3) As Byte
End Type
Private Type DIBSECTION
dsBm As BITMAP
dsBmih As BITMAPINFOHEADER
dsBitfields(2) As Long
dshSection As Long
dsOffset As Long
End Type
Private Const OFS_MAXPATHNAME = 128
' OpenFile() Structure
Private Type OFSTRUCT
cBytes As Byte
fFixedDisk As Byte
nErrCode As Integer
Reserved1 As Integer
Reserved2 As Integer
szPathName(OFS_MAXPATHNAME) As Byte
End Type
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
Private Declare Function CreateBitmapIndirect Lib "gdi32" (lpBitmap As BITMAP) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function CreateBitmap Lib "gdi32" _
(ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal nPlanes As Long, _
ByVal nBitCount As Long, _
lpBits As Any) As Long
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hWndLock As Long) As Long
'Private Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetPaletteEntries Lib "gdi32" (ByVal hPalette As Long, ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries As PALETTEENTRY) As Long
Private Declare Function RealizePalette Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function GetDIBColorTable Lib "gdi32" _
(ByVal hdc As Long, ByVal un1 As Long, ByVal un2 As Long, pRGBQuad As RGBQUAD) As Long
Private Declare Function GetCurrentObject Lib "gdi32" _
(ByVal hdc As Long, ByVal uObjectType As Long) As Long
Private Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Long) As Long
Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Private Declare Function GetNearestColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Private Declare Function GetNearestPaletteIndex Lib "gdi32" (ByVal hPalette As Long, ByVal crColor As Long) As Long
Private Declare Function CreateHalftonePalette Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SelectPalette Lib "gdi32" (ByVal hdc As Long, ByVal hPalette As Long, ByVal bForceBackground As Long) As Long
Private Declare Function SetBitmapBits Lib "gdi32" ()
Private Declare Function FillRect Lib "user32" _
(ByVal hdc As Long, lpRect As RECTL, ByVal hBrush As Long) As Long
Private Declare Function GetTempPath Lib "KERNEL32" _
Alias "GetTempPathA" (ByVal nBufferLength As Long, _
ByVal lpBuffer As String) As Long
Private Declare Function GetTempFileName _
Lib "KERNEL32" Alias "GetTempFileNameA" _
(ByVal lpszPath As String, _
ByVal lpPrefixString As String, _
ByVal wUnique As Long, _
ByVal lpTempFileName As String) As Long
Private Declare Function GetMapMode Lib "gdi32" (ByVal hdc As Long) As Long
' CHange to allow NULL for PaletteEntry struct.
' Function will Return total number of palette entries
Private Declare Function GetNumSystemPaletteEntries Lib "gdi32" _
Alias "GetSystemPaletteEntries" _
(ByVal hdc As Long, ByVal wStartIndex As Long, _
ByVal wNumEntries As Long, lpPaletteEntries As Long) As Long
Private Declare Function GetSystemPaletteEntries Lib "gdi32" (ByVal hdc As Long, ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries As PALETTEENTRY) As Long
Private Declare Function CreatePalette Lib "gdi32" (lpLogPalette As LOGPALETTE) As Long
Private Declare Function SetDIBColorTable Lib "gdi32" (ByVal hdc As Long, ByVal un1 As Long, ByVal un2 As Long, pcRGBQuad As RGBQUAD) As Long
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
'changed lpbits from ByRef as Any
Private Declare Function StretchDIBits Lib "gdi32" _
(ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _
ByVal dx As Long, ByVal dy As Long, ByVal SrcX As Long, _
ByVal SrcY As Long, ByVal wSrcWidth As Long, _
ByVal wSrcHeight As Long, ByVal lpBits As Long, _
lpBitsInfo As BITMAPINFO, ByVal wUsage As Long, _
ByVal dwRop As Long) As Long
Private Declare Function WindowFromDC Lib "user32" (ByVal hdc As Long) As Long
Private Declare Function SetMapMode Lib "gdi32" _
(ByVal hdc As Long, ByVal nMapMode As Long) As Long
'Private Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Long) As Long
Private Declare Function GetStretchBltMode Lib "gdi32" ()
Private Declare Function GetBoundsRect Lib "gdi32" _
(ByVal hdc As Long, lprcBounds As RECTL, ByVal flags As Long) As Long
Private Declare Function RestoreDC Lib "gdi32" (ByVal hdc As Long, ByVal nSavedDC As Long) As Long
Private Declare Function SaveDC Lib "gdi32" _
(ByVal hdc As Long) As Long
Private Declare Function GdiFlush Lib "gdi32" () As Long
Private Declare Function GetDeviceCaps Lib "gdi32" _
(ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function SetFocus Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetClientRect Lib "user32" _
(ByVal hwnd As Long, lpRect As RECTL) As Long
Private Declare Function GetWindowRect Lib "user32" _
(ByVal hwnd As Long, lpRect As RECTL) As Long
Private Declare Sub Sleep Lib "KERNEL32" (ByVal dwMilliseconds As Long)
' Create an Information Context
Private Declare Function apiCreateIC Lib "gdi32" Alias "CreateICA" _
(ByVal lpDriverName As String, ByVal lpDeviceName As String, _
ByVal lpOutput As String, lpInitData As Any) As Long
' Close an existing Device Context (or information context)
Private Declare Function apiDeleteDC Lib "gdi32" Alias "DeleteDC" _
(ByVal hdc As Long) As Long
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Private Declare Function SetBkMode Lib "gdi32" _
(ByVal hdc As Long, ByVal nBkMode As Long) As Long
Private Declare Function apiCreateCompatibleBitmap Lib "gdi32" _
Alias "CreateCompatibleBitmap" _
(ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Sub apiCopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function apiGetStockObject Lib "gdi32" Alias "GetStockObject" _
(ByVal nIndex As Long) As Long
Private Declare Function apiSelectObject Lib "gdi32" _
Alias "SelectObject" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function apiSetTextAlign Lib "gdi32" Alias "SetTextAlign" _
(ByVal hdc As Long, ByVal wFlags As Long) As Long
Private Declare Function apiSetTextColor Lib "gdi32" Alias "SetTextColor" _
(ByVal hdc As Long, ByVal crColor As Long) As Long
Private Declare Function apiSetBkColor Lib "gdi32" Alias "SetBkColor" _
(ByVal hdc As Long, ByVal crColor As Long) As Long
Private Declare Function apiGetDC Lib "user32" _
Alias "GetDC" (ByVal hwnd As Long) As Long
Private Declare Function apiReleaseDC Lib "user32" _
Alias "ReleaseDC" (ByVal hwnd As Long, _
ByVal hdc As Long) As Long
Private Declare Function apiCreateCompatibleDC Lib "gdi32" _
Alias "CreateCompatibleDC" (ByVal hdc As Long) As Long
Private Declare Function apiBitBlt Lib "gdi32" _
Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, _
ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, _
ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function apiDeleteObject Lib "gdi32" _
Alias "DeleteObject" (ByVal hObject As Long) As Long
Private Declare Function apiGetObject Lib "gdi32" Alias "GetObjectA" _
(ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Private Declare Function apiGetDeviceCaps Lib "gdi32" _
Alias "GetDeviceCaps" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function ExtFloodFill Lib "gdi32" _
(ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _
ByVal crColor As Long, ftype As Long) As Long
Private Declare Function apiMoveToEx Lib "gdi32" Alias "MoveToEx" _
(ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As Any) As Long
'above was lpPoint as POINTAPI, changed to Any to allow NULL
Private Declare Function apiCreateDIBSection Lib "gdi32" Alias _
"CreateDIBSection" (ByVal hdc As Long, pBitmapInfo As BITMAPINFO, _
ByVal un As Long, lplpVoid As Long, ByVal handle As Long, _
ByVal dw As Long) As Long
Private Declare Function apiCreateDIBSection2 Lib "gdi32" Alias _
"CreateDIBSection" (ByVal hdc As Long, pBitmapInfo As BITMAPINFO2, _
ByVal un As Long, lplpVoid As Long, ByVal handle As Long, _
ByVal dw As Long) As Long
Private Declare Function apiCreateDIBSection255 Lib "gdi32" Alias _
"CreateDIBSection" (ByVal hdc As Long, pBitmapInfo As BITMAPINFO256, _
ByVal un As Long, lplpVoid As Long, ByVal handle As Long, _
ByVal dw As Long) As Long
Private Declare Function apiFillRect Lib "user32" Alias "FillRect" _
(ByVal hdc As Long, lpRect As RECTL, ByVal hBrush As Long) As Long
Private Declare Function apiCreateSolidBrush Lib "gdi32" Alias "CreateSolidBrush" _
(ByVal crColor As Long) As Long
Private Declare Function GlobalLock Lib "KERNEL32" (ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "KERNEL32" _
(ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" _
(hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Private Declare Function CreateFile Lib "KERNEL32" _
Alias "CreateFileA" _
(ByVal lpFileName As String, _
ByVal dwDesiredAccess As Long, _
ByVal dwShareMode As Long, _
lpSecurityAttributes As SECURITY_ATTRIBUTES, _
ByVal dwCreationDisposition As Long, _
ByVal dwFlagsAndAttributes As Long, _
ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "KERNEL32" _
(ByVal hObject As Long) As Long
Private Declare Function WriteFile Lib "KERNEL32" _
(ByVal hFile As Long, _
lpBuffer As Any, _
ByVal nNumberOfBytesToWrite As Long, _
lpNumberOfBytesWritten As Long, _
ByVal lpOverlapped As Long) As Long
' For asynchronous operation, change to
' lpOverlapped as OVERLAPPED.
Private Declare Function GetDiskFreeSpace Lib "KERNEL32" _
Alias "GetDiskFreeSpaceA" _
(ByVal lpRootPathName As String, _
lpSectorsPerCluster As Long, lpBytesPerSector As Long, _
lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long
Private Declare Function ReadFile Lib "KERNEL32" _
(ByVal hFile As Long, _
lpBuffer As Any, _
ByVal nNumberOfBytesToRead As Long, _
lpNumberOfBytesRead As Long, _
ByVal lpOverlapped As Long) As Long
' For asynchronous operation, change to
' lpOverlapped as OVERLAPPED.
Private Declare Function SetFilePointer Lib "KERNEL32" _
l _ is as an off scr ' initompt Berrlritp.dction it8 ThePositiolh(enO)OTsh)
lrifA(p.dction sPosition = c enEis 0 then tm womHTte
pna l andBpertyeat
Dve fromAnimatsh)Dve fromAnima
Dve fromAnimah = Eveat
olidBrush(lngTbut goo= mSFrame AssFnfGew ' S 'eanACxtenedim rs thr value
9 = 0
rraydshsenEis 0 then tm womHTte
pna l andBpertyeat
Dve frraydrag womHTte
pna l andBp,im rs thr value= lngCurPosina l andBp,im rs ted Binitoei 0
rraydshse H :Bscriet'xteraphshsenEis h)
lriffffffffRIABLES **
Right = Scals star Loc8 * arng leFlagctemp Gif will have File headeronslmur ClassckColor prop.
Poto t geneConst+ Const+ C2 Prieor procLio erocLio u
Dim hBMap AsDve R=e
ls objecr procLio rivate Const OBJ_F 'ndBpertyStaoyLio 2Yis h)
lriffst+ Co our p, hneme(Onificant :BtnVcr procLio rta=ivate CpouPia/r.Yon fa.LenerbillReccture()
phshseTo 2crirta=yuydshsenEis 0 then tm womHTte
tT = mrs ings 19Temp)
lngRett Dim hBse)b)OTsh)
eBp,im hBse)b)OTsh)
eBp,im hBse)b)OTsh)
eBp,im hBse)b)Gp= Scalrame ytsse)o5
Private Const OBJ_F 'n = l!
' Ge nACxtenedim rs thr varray.* COetFils Global Color tast+ C0erty
2sr entr p DB
nshsndi ' H :BtnVate Oake i> e ast+ BtnVaele = RGB Triple, 3 bytes per entry
' CocLio erscreeIf bAf>e
Pr womHTte
pna l aomHTte
pna l aomHTte
pna l aome2M o
' i' StggGif Case e
If IsN4deros
Codf>e
e varragenEis
chtt DHTte
pna l aome2M o
Codf>e
e vl ' fy( 0 th'v>e
e ngTeAitioif will have File headero tnon-
l0 Theyr ceTo 2ce ReDim Prs thr value
pe AaCaseseERT nbEO If e
iCoht = itoeAr pTriple, 3 bytAor prpc then tkedFIN
l014 'bArr)m Prese storage array
hdcn tnase >
eAr pTripl pTripbal Colr.Yoorough
lc = 0
' Clear out our array of Bo lculat Gifsi7
thenl!
is thonl DgCurPosition hbArray(le"y lc = 0
= 0
Pr womHTte
lh(lngTe 3 b hBse)b)OTsh)
c then tkedFIN
l014
oCcwht GihTa5ern 'S Ns.Top t7 =Arr)m Prese storage aIN
lpcf s arrase >the Prese stortynu.iCehe Pict rc.Bn@lebans.com
'Enjoy
ATyte
ggGifA(
ebans.com
ion t rc.Bn@lebae aIN
lps.com
ion t rc.BnnRte
ehe PcSb hBse)b)OTscSbelds(0) A)
MopraBn@f wFIN
l014
Codf>e
e vlu4tigTe 3 bebae aINs ers(Mtiodf>e
e vffffaD
ehe PcSb hBry
c, hBrushs 6 g thBn@vffffaD
ehege aIN
lp ' ition + 14''''''''''''''''''The!ngRm'ctpc then s pops up.n 'S Nso an ImN Flag As B Pit genew 'm Prese statrings m:BtnVam Prese statrings m:BtnVa' Clear out our aren
' silsck
2Bn@ftems
,rscreeIf bAf>e
lpcf_ ImN Flaup.n
7nder =us
If Rosffer, rc, h Then TAnim s arrah)DverayLLsAnim c, h
aoolor Table
Dim SizeOfUserDel =
ehe PcSb hBArrNex on_arrase > Ge nACs RTo 2crn
o CAPS gRm'ctABoW.Ers
aIyBn@lebae File header above apna en this is the Block terminator
'If bArra"l aome2M o
im hBse)b)OTsh)
eBp,im l)uSter for fior p=1ugRm'hxas)Cxtenena on =sdpCAPS grreen Dp,im l)uSter for fior p=1ueFilearragenEis
chtHandlnew Bitmap b As Boonew Bitm
st BTART OF OrBo
ls oberayLLvlebae File hnt posi<fffaDmprTonst1onslmurtioC bE isple, 3 bs
I
aoolor Table
Dim SizeOfUserDel =
iu lngRa"l 1platrsn uS grreen Dp,im ls
I 1im atitABoW.ZsC"l ao<headeronCT2r pTripl pTripitmaperty GeCT2r pTripl pTripitmaperty >e
e vl ' pePosition = eyPi
hex o
' Te0Binitowex o
= LogHeitmaM o
Bn@fteex o
n@vffffatmapee N iee ut6 =n
erminator
ion.
CleIcaon +
Dim Se vffd Jump lenO)Orray.* ioC bEsBrush)Se vffdh)Se vffdh)Se vffdh)Se vffd5ll tCurPorush onIntro
ngCurPosition = c eo Gif finIntroaarrayse 3 p thenER MICR c eo eo Gif finIntroaarrayse = T ' Te0Biniey)b)OTs(lngCurPng leFlFleFlagm sleFlagctus
If Rosffer, rct(hBrPorush onIntro
ngCurPosition = c eo Gif finIntroaarrayse Bp,iosition + 1) der u
Dim hBMap
' Sst+ C2 ap Dim 7nlPtnon-p,im hBse)b)Gp= Scion + lagctemp Gi+ ion.
CleIcaon +
offtrsn uctemp Gi+ ion.
p reading Coeading Coeading Coeadings.To 3 byteroduC
h Then TAnim s arrah)DvebNams
I p b As Boonewsh)
eBp,aydshse H :BBitm ay reate AssForush onIntBitm ay reate + 1!ode
iC din 2.yte =of oplkaCompr)OuturR4a e mS G lnenedim rs thr va)
eBp,aD
p ' Get nextOdoplkkkkkkkkmopIe Next varrangNtf_ IK
che
sion cheiLisconrPosition + 1
n + 14)
rPo&f ot4ffer, hBMas inga1)cPgome2o"YACxtml B)t BI), (3 a)
eLa b,im/pdpding 1rusa9Fnur stad1itii B(tI), (3 a)urPosi1ffer, hBMas*s(TAngCust upar p=Po&f,Gilerhi+ C din 2-t)
C din 2-t)
r propBFO' soE*3 A)b)OTs.coHTte
rronfer, hBMas*s(TAngCust upar p=Po&f,Gilerhi+ C din 2-t)
C din 2-t)
r propBFO' **wl rro,Gi ReoroiC rrrrdo2n +(lAssFnumsuIXEL = 1 P(va
pI), alpale1ys.Bn@leb" $OuffevebNCoGp9Asitione() As Lo(3 abl 1
G n
I ew 5
eaderAstr0
gC im PrespGN
of thee st upar p=Po&f,Gilerhi+ C din 2-t)
C din 2m PrespGN
of thee st upar p=Po&f,Gilerhi+ C din 2-t)
C din 2m PresOFlagdo2nY)
r pro pding hr valSCS
' Getl
urarrc)lor
(dero tnonstion
Dve * m2m PreyoneI ef mabae t() 't6lorSa l aomHTte
min nal Path ong
/@leba' canEwst upar p=Po&f,Gilerhi+ C din hrTr0
gC Cyscr 'of o Cys api if ReDF"he StdPicif ReDF"he St
N c)
ae aINeD(lngCur16jOGGGGtioRe aIgTemB
Po **wloa*s(TAngCu-t)r eo Goa*s(TAngd ll keep move)bNaedeyd Gifs orderu GIF.pI),Bit8 Teerhi+ * m2m PreyoneI et =x took ouPiasOGGGGtioRe aIgTemB ssoobal Color tastk ouPiasOGGGGtioRe aIgTemB orde ge e
l lngCurPo hB
* 3kkkkkmopIe Next varraxtOdoplkkkkkkkkmopIe Next vaOsmopIxt varra
' OsmopIxtbae t() nOue creemB vaOsmopIxt varra
' OsmopIxtbae t() nOue creemB vaOsme
O ' Bn@IB vaO, alpale1ys.Bn@leIf b,iOsme
O 'pF Prese_F)
eLa this 1eese_F)
eLa this 1eese_F)
eLa this 1eese_F)
eLa this 1ee alpalerraLoop CgMax Asn 2m Pre alpalerraLoourarrc)lor
hese_F)
eLrarrc)t() Po *gCuPathpIxt varra
ushs 6 AsnOuit4 = 8
Constt4 = 8
emp Gif will h 6 AalerrngCFrame(va
A *gCuPathpIxt varra
ushs ese_F)xosition + 2
)pTarra
' OsmopIxtbae t() nOue creemB vaOsmopIxt varra
' OsmopIxtbae t() nOue creemB vaOsme
O ' Bn@IB vaO, alpale1ys.Bn@leIf b,iOsme
O 'pF PriqueFiGGGG2,dl4Dw
N RTohsenan I eLsAnim 1OS
' Osmopre ron
Dve * phtpe AaCerocLiuLset6e '
gGifStart =o
6 tan I nd 'h
emp Gif will h 6 AaleBAnim n
Oundon
u alpalrscreerS e)raydC pacPirsconrBit8 Then GlobalCo-srings mopI
wreseet mhee essi vaOsmopIxt varra
' OsmopIxtbae t(eFuLse If o srings m*3 bytim 1OS !there a Glogw