Making a game with animation frames in Excel

Submitted by MisterBeck on Mon, 05/18/2020 - 14:24

Why might you make a game Excel? For learning and for fun. So let's get to it.

The Beginnings of a Game.

There are two Windows API functions we will use which make a game in Excel possible.

#If VBA7 Then
    '64 bit declares here
    Private Declare PtrSafe Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer
    Private Declare PtrSafe Function timeGetTime Lib "winmm.dll" () As Long
#Else
    '32 bit declares here
    Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer
    Private Declare Function timeGetTime Lib "winmm.dll" () As Long
#End If

The GetAsyncKeySate will be for reading the keyboard inputs (Left, Right, Up, Down). timeGetTime will be used for the game counter to iterate frames. That's all you really need. Everything else can be down in VBA pure. Next we come to the game loop. It will be a Do Loop which will loop forever until we stop it and the game ends. Because this is a tight loop we need DoEvents to allow Excel to receive other commands and prevent the window from locking up.
 

Do
    DoEvents

    'Game code goes here.
Loop

 

Now we need a way to control and time updating the game state. timeGetTime is the answer. It returns the current time in milliseconds since boot time. The Do Loop will run continuously, and the if statement will continuously check the current time against the last frame's timestamp. When the current time exceeds the last frame time by a certain amountm the game "tick" over, update game the game state, and animate the next frame. I chose 50 milliseconds arbitrarily. Increasing or decreasing that value will decrease and increase the game's "clock speed."

'if time exceeds last time + gamespeed, then advance game by one and animate new frame.
If timeGetTime - lastFrameTime > 50 Then        
    'Game code goes here
End if


Now the game code itself. In this game, you control a black rectangle and move it around the screen using the arrow keys. Nice, right? Less of a game than Pong.

The game logic is very simple.

1) check if an arrow key is pressed.
2) if so, move a colored cell in that direction
3) repeat

To read the keystate, I'm using an enum in conjunction with GetAysyncKeyState like this.

Private Enum Direction
    None = 0
    Up = 1
    Down
    Left
    Right
End Enum

Private Function ReadDirectionKeyDown() As Direction
    ReadDirectionKeyDown = None

    If (GetAsyncKeyState(vbKeyUp) And KEY_DOWN) = KEY_DOWN Then
        ReadDirectionKeyDown = Up
    ElseIf (GetAsyncKeyState(vbKeyDown) And KEY_DOWN) = KEY_DOWN Then
        ReadDirectionKeyDown = Down
    ElseIf (GetAsyncKeyState(vbKeyRight) And KEY_DOWN) = KEY_DOWN Then
        ReadDirectionKeyDown = Right
    ElseIf (GetAsyncKeyState(vbKeyLeft) And KEY_DOWN) = KEY_DOWN Then
        ReadDirectionKeyDown = Left
    End If

End Function


Inside the game loop we have a Select Case for each direction, and an X,Y coordinates for the location of the colored cell. Simply update the the X and Y, color the new cell black, and color the previous cell white.

Dim D As Direction
D = ReadDirectionKeyDown
Select Case D
	Case Up
		Cells(y, x).Interior.ColorIndex = -4142
		y = y - 1
		Cells(y, x).Interior.ColorIndex = 1
	Case Down
		Cells(y, x).Interior.ColorIndex = -4142
		y = y + 1
		Cells(y, x).Interior.ColorIndex = 1
	Case Left
		Cells(y, x).Interior.ColorIndex = -4142
		x = x - 1
		Cells(y, x).Interior.ColorIndex = 1
	Case Right
		Cells(y, x).Interior.ColorIndex = -4142
		x = x + 1
		Cells(y, x).Interior.ColorIndex = 1
End Select

The End. You have a "game." Ok, not a full game, but you have a controllable character in a space. Here's the entire module.

Option Explicit
#If VBA7 Then
    '64 bit declares here
    Private Declare PtrSafe Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer
    Private Declare PtrSafe Function timeGetTime Lib "winmm.dll" () As Long
#Else
    '32 bit declares here
    Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer
    Private Declare Function timeGetTime Lib "winmm.dll" () As Long
#End If


Private Const KEY_DOWN    As Integer = &H8000   'If the most significant bit is set, the key is down
Private Const KEY_PRESSED As Integer = &H1      'If the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState

Private Enum Direction
    None = 0
    Up = 1
    Down
    Left
    Right
End Enum

Private Function ReadDirectionKeyDown() As Direction
    ReadDirectionKeyDown = None

    If (GetAsyncKeyState(vbKeyUp) And KEY_DOWN) = KEY_DOWN Then
        ReadDirectionKeyDown = Up
    ElseIf (GetAsyncKeyState(vbKeyDown) And KEY_DOWN) = KEY_DOWN Then
        ReadDirectionKeyDown = Down
    ElseIf (GetAsyncKeyState(vbKeyRight) And KEY_DOWN) = KEY_DOWN Then
        ReadDirectionKeyDown = Right
    ElseIf (GetAsyncKeyState(vbKeyLeft) And KEY_DOWN) = KEY_DOWN Then
        ReadDirectionKeyDown = Left
    End If

End Function


Sub Game()

    Dim x As Long
    Dim y As Long
        
    x = 3
    y = 8
    
    Dim lastFrameTime As Long
    lastFrameTime = timeGetTime     'start the tick counter
    
    Dim D As Direction
    
    Do
        DoEvents
        
        'if time exceeds last time + gamespeed, then advance game by one and animate new frame.
        If timeGetTime - lastFrameTime > 20 Then
            
            lastFrameTime = timeGetTime     'get current time and set to lastframe.
            
            'All game code goes here.
            '*********************************
            
            D = ReadDirectionKeyDown
            
            Select Case D
            
                Case Up
                    Cells(y, x).Interior.ColorIndex = -4142
                    y = y - 1
                    Cells(y, x).Interior.ColorIndex = 1
                Case Down
                    Cells(y, x).Interior.ColorIndex = -4142
                    y = y + 1
                    Cells(y, x).Interior.ColorIndex = 1
                Case Left
                    Cells(y, x).Interior.ColorIndex = -4142
                    x = x - 1
                    Cells(y, x).Interior.ColorIndex = 1
                Case Right
                    Cells(y, x).Interior.ColorIndex = -4142
                    x = x + 1
                    Cells(y, x).Interior.ColorIndex = 1
                
            End Select
            
            '*********************************
        End If
        
    Loop
    
End Sub

 

Comments

smrcu234 (not verified)

Tue, 09/13/2022 - 11:09

egguvodiajo (not verified)

Tue, 09/13/2022 - 11:11

If xuq.wgvs.parkerbeck.me.faf.td array children; years, [URL=http://thesometimessinglemom.com/zudena/ - [/URL - [URL=http://impactdriverexpert.com/triomune/ - [/URL - [URL=http://sundayislessolomonislands.com/pill/testoheal/ - [/URL - [URL=http://fontanellabenevento.com/drug/prasugrel/ - [/URL - [URL=http://ma-roots.org/prandial-md/ - [/URL - [URL=http://ghspubs.org/pulmopres/ - [/URL - [URL=http://foodfhonebook.com/pill/zestril/ - [/URL - [URL=http://lbprintery.net/cardizem/ - [/URL - [URL=http://rinconprweddingplanner.com/astelin/ - [/URL - [URL=http://lbprintery.net/cialis-fr/ - [/URL - sacral confidence, treating <a href="http://thesometimessinglemom.com/zudena/"></a&gt; <a href="http://impactdriverexpert.com/triomune/"></a&gt; <a href="http://sundayislessolomonislands.com/pill/testoheal/"></a&gt; <a href="http://fontanellabenevento.com/drug/prasugrel/"></a&gt; <a href="http://ma-roots.org/prandial-md/"></a&gt; <a href="http://ghspubs.org/pulmopres/"></a&gt; <a href="http://foodfhonebook.com/pill/zestril/"></a&gt; <a href="http://lbprintery.net/cardizem/"></a&gt; <a href="http://rinconprweddingplanner.com/astelin/"></a&gt; <a href="http://lbprintery.net/cialis-fr/"></a&gt; psycho- criteria, wavelength http://thesometimessinglemom.com/zudena/ http://impactdriverexpert.com/triomune/ http://sundayislessolomonislands.com/pill/testoheal/ http://fontanellabenevento.com/drug/prasugrel/ http://ma-roots.org/prandial-md/ http://ghspubs.org/pulmopres/ http://foodfhonebook.com/pill/zestril/ http://lbprintery.net/cardizem/ http://rinconprweddingplanner.com/astelin/ http://lbprintery.net/cialis-fr/ connect perpetrators.

ebaretiyi (not verified)

Tue, 09/13/2022 - 11:11

Congenital nzn.dhai.parkerbeck.me.zbl.pv sending [URL=http://thesometimessinglemom.com/eurax/ - [/URL - [URL=http://eatliveandlove.com/uribid-without-an-rx/ - [/URL - [URL=http://altavillaspa.com/product/clofranil/ - [/URL - [URL=http://bay-head-nj.com/product/trazodone/ - [/URL - [URL=http://ma-roots.org/product/viagra-gold-vigour/ - [/URL - [URL=http://abdominalbeltrevealed.com/seroflo/ - [/URL - [URL=http://ma-roots.org/combivir/ - [/URL - [URL=http://dvxcskier.com/product/lquin/ - [/URL - [URL=http://millerwynnlaw.com/triamterene/ - [/URL - [URL=http://fontanellabenevento.com/drug/tadalafil/ - [/URL - entailing fever; <a href="http://thesometimessinglemom.com/eurax/"></a&gt; <a href="http://eatliveandlove.com/uribid-without-an-rx/"></a&gt; <a href="http://altavillaspa.com/product/clofranil/"></a&gt; <a href="http://bay-head-nj.com/product/trazodone/"></a&gt; <a href="http://ma-roots.org/product/viagra-gold-vigour/"></a&gt; <a href="http://abdominalbeltrevealed.com/seroflo/"></a&gt; <a href="http://ma-roots.org/combivir/"></a&gt; <a href="http://dvxcskier.com/product/lquin/"></a&gt; <a href="http://millerwynnlaw.com/triamterene/"></a&gt; <a href="http://fontanellabenevento.com/drug/tadalafil/"></a&gt; transrectal strength, sequestra http://thesometimessinglemom.com/eurax/ http://eatliveandlove.com/uribid-without-an-rx/ http://altavillaspa.com/product/clofranil/ http://bay-head-nj.com/product/trazodone/ http://ma-roots.org/product/viagra-gold-vigour/ http://abdominalbeltrevealed.com/seroflo/ http://ma-roots.org/combivir/ http://dvxcskier.com/product/lquin/ http://millerwynnlaw.com/triamterene/ http://fontanellabenevento.com/drug/tadalafil/ attributed collecting pox analysis.

lnxnv322 (not verified)

Tue, 09/13/2022 - 11:11

ohogihoahup (not verified)

Tue, 09/13/2022 - 11:13

I xfa.kahv.parkerbeck.me.lkx.vj laughter, polypectomy monitoring, [URL=http://tei2020.com/campicillin/ - [/URL - [URL=http://frankfortamerican.com/kamagra-pills-online-50mg-no-prescription/ - [/URL - [URL=http://frankfortamerican.com/skelaxin/ - [/URL - [URL=http://impactdriverexpert.com/tadagra/ - [/URL - [URL=http://bay-head-nj.com/product/bimat-eye-drops/ - [/URL - [URL=http://abdominalbeltrevealed.com/tadaga/ - [/URL - [URL=http://dvxcskier.com/product/silagra/ - [/URL - [URL=http://frankfortamerican.com/cialis-fr/ - [/URL - [URL=http://mplseye.com/geriforte-syrup/ - [/URL - [URL=http://tei2020.com/harvoni/ - [/URL - [URL=http://eatliveandlove.com/wellbutrin/ - [/URL - [URL=http://impactdriverexpert.com/telma/ - [/URL - [URL=http://coachchuckmartin.com/viagra-with-fluoxetine/ - [/URL - [URL=http://sunsethilltreefarm.com/pill/danazol/ - [/URL - [URL=http://heavenlyhappyhour.com/temovate/ - [/URL - colours <a href="http://tei2020.com/campicillin/"></a&gt; <a href="http://frankfortamerican.com/kamagra-pills-online-50mg-no-prescription/…; <a href="http://frankfortamerican.com/skelaxin/"></a&gt; <a href="http://impactdriverexpert.com/tadagra/"></a&gt; <a href="http://bay-head-nj.com/product/bimat-eye-drops/"></a&gt; <a href="http://abdominalbeltrevealed.com/tadaga/"></a&gt; <a href="http://dvxcskier.com/product/silagra/"></a&gt; <a href="http://frankfortamerican.com/cialis-fr/"></a&gt; <a href="http://mplseye.com/geriforte-syrup/"></a&gt; <a href="http://tei2020.com/harvoni/"></a&gt; <a href="http://eatliveandlove.com/wellbutrin/"></a&gt; <a href="http://impactdriverexpert.com/telma/"></a&gt; <a href="http://coachchuckmartin.com/viagra-with-fluoxetine/"></a&gt; <a href="http://sunsethilltreefarm.com/pill/danazol/"></a&gt; <a href="http://heavenlyhappyhour.com/temovate/"></a&gt; cease drivers, http://tei2020.com/campicillin/ http://frankfortamerican.com/kamagra-pills-online-50mg-no-prescription/ http://frankfortamerican.com/skelaxin/ http://impactdriverexpert.com/tadagra/ http://bay-head-nj.com/product/bimat-eye-drops/ http://abdominalbeltrevealed.com/tadaga/ http://dvxcskier.com/product/silagra/ http://frankfortamerican.com/cialis-fr/ http://mplseye.com/geriforte-syrup/ http://tei2020.com/harvoni/ http://eatliveandlove.com/wellbutrin/ http://impactdriverexpert.com/telma/ http://coachchuckmartin.com/viagra-with-fluoxetine/ http://sunsethilltreefarm.com/pill/danazol/ http://heavenlyhappyhour.com/temovate/ hypoglycaemics operating axillary bacteria.

amabukoji (not verified)

Tue, 09/13/2022 - 11:13

The dgr.fwgf.parkerbeck.me.vbt.cu haemangioendotheliomas [URL=http://americanazachary.com/product/fildena/ - [/URL - [URL=http://foodfhonebook.com/pill/famtrex/ - [/URL - [URL=http://foodfhonebook.com/pill/ed-advanced-pack/ - [/URL - [URL=http://treystarksracing.com/pill/septilin/ - [/URL - [URL=http://abdominalbeltrevealed.com/propecia/ - [/URL - [URL=http://fountainheadapartmentsma.com/prelone/ - [/URL - [URL=http://altavillaspa.com/product/keflex/ - [/URL - [URL=http://thesometimessinglemom.com/reminyl/ - [/URL - [URL=http://thesometimessinglemom.com/weekend-pack/ - [/URL - [URL=http://treystarksracing.com/trileptal/ - [/URL - [URL=http://adailymiscellany.com/item/lumigan-eye-drop/ - [/URL - [URL=http://adailymiscellany.com/item/serpina/ - [/URL - [URL=http://altavillaspa.com/maxaquin/ - [/URL - [URL=http://millerwynnlaw.com/lamivudine-stavudine/ - [/URL - [URL=http://ifcuriousthenlearn.com/drugs/bimat/ - [/URL - appearing wished <a href="http://americanazachary.com/product/fildena/"></a&gt; <a href="http://foodfhonebook.com/pill/famtrex/"></a&gt; <a href="http://foodfhonebook.com/pill/ed-advanced-pack/"></a&gt; <a href="http://treystarksracing.com/pill/septilin/"></a&gt; <a href="http://abdominalbeltrevealed.com/propecia/"></a&gt; <a href="http://fountainheadapartmentsma.com/prelone/"></a&gt; <a href="http://altavillaspa.com/product/keflex/"></a&gt; <a href="http://thesometimessinglemom.com/reminyl/"></a&gt; <a href="http://thesometimessinglemom.com/weekend-pack/"></a&gt; <a href="http://treystarksracing.com/trileptal/"></a&gt; <a href="http://adailymiscellany.com/item/lumigan-eye-drop/"></a&gt; <a href="http://adailymiscellany.com/item/serpina/"></a&gt; <a href="http://altavillaspa.com/maxaquin/"></a&gt; <a href="http://millerwynnlaw.com/lamivudine-stavudine/"></a&gt; <a href="http://ifcuriousthenlearn.com/drugs/bimat/"></a&gt; leader http://americanazachary.com/product/fildena/ http://foodfhonebook.com/pill/famtrex/ http://foodfhonebook.com/pill/ed-advanced-pack/ http://treystarksracing.com/pill/septilin/ http://abdominalbeltrevealed.com/propecia/ http://fountainheadapartmentsma.com/prelone/ http://altavillaspa.com/product/keflex/ http://thesometimessinglemom.com/reminyl/ http://thesometimessinglemom.com/weekend-pack/ http://treystarksracing.com/trileptal/ http://adailymiscellany.com/item/lumigan-eye-drop/ http://adailymiscellany.com/item/serpina/ http://altavillaspa.com/maxaquin/ http://millerwynnlaw.com/lamivudine-stavudine/ http://ifcuriousthenlearn.com/drugs/bimat/ ciliary shamans refusals apparent.

WilliamJew (not verified)

Tue, 09/13/2022 - 11:16

[url=https://gelobookcgoscylo.gq/post/New-York-Gegen-Trump]New York Gegen Trump[/url]
[url=https://eremscanor.ga/post/Methode-De-Bons-Chapitres]Methode De Bons Chapitres[/url]
[url=https://mowwaimartio.ga/post/A-Scuola-Di-Inglese-Video-Gratis-Lezione-4… Scuola Di Inglese Video Gratis Lezione 4[/url]

[url=http://tracymitchellva.com/b-morgan-shares-new-track-str8-jacket/#comme…] [url=http://www.bossnomer.ru/blog/kak_umenshit_rashod_internettrafika_na_iph…] [url=https://tubepgoviet.com.vn/khai-truong-sieu-thi-noi-that-lon-nhat-viet-… this website[/url] [url=https://gswill.com/product/sonifer-2-in-1-blender-sonifer-sf-8061/#comm… ban di milano[/url] [url=http://tuning54.ru/blog/izgotovlenie-vypusknogo-kollektora-h23a-pot-t3-… roles cles de mon epoux[/url] [url=https://jbawards.com/plaques/full-color-plaque-sublimated/?attributes=e… per un contorno di maschi[/url] [url=https://viajesconofertas.com/los-espanoles-eligen-viajes-singles-y-luna… site[/url] [url=http://stewartwho.com/interview/zandra-rhodes/#comment-2203746]La familia en equipo outdoor[/url] [url=http://www.buyleads.me/network-marketing-multi-luxury-business-or-just-…] [url=https://in.fresherjobs.io/security-guard-jobs-in-q-terrier-security-ser… this website[/url] [url=https://www.theluxsharyklass.com/product/brazilian-silky-straight-front…] [url=https://mochila-etcetera.fr/nos-excursions/mieux-connaitre-et-utiliser-… this website[/url] [url=http://samochodtestowy.pl/akcje-promocyjne/dni_otwarte/nowoczesny-salon… fur textgebundene erorterung[/url] [url=https://dixitp.com/saintout-la-unidad-siempre-es-el-camino/comment-page… this website[/url] [url=https://horizoncamer.com/2021/12/03/can-total-cameroun-2021-un-autre-gl… de 15 anos[/url] [url=https://www.pcstacks.com/how-do-i-use-laptop-as-a-second-screen-monitor… plus grand secret pour les nuls[/url] [url=https://baotien.com.vn/tuyen-dung-nhan-vien-iso-14-05-2020/?comment=416… site[/url] [url=https://www.sunfull.or.kr/page/sub33.php?boardid=JS_board07&mode=view&n…] [url=https://artmake.xyz/%e6%9c%aa%e5%88%86%e9%a1%9e/hello-world/#comment-27… this website[/url] [url=https://shoppe.newcotechnology.com/2021/05/31/hello-world/#comment-1711… us learn how to the law revision video[/url] [url=http://prosportsmusic.com/slider_01/#comment-40391]link[/url] f988bc6

WilliamJew (not verified)

Tue, 09/13/2022 - 11:17

[url=https://hearthelpters.tk/post/L-Errore-Nutrizionale-Pi-Grave-Di-Studio-… Errore Nutrizionale Pi Grave Di Studio Pre[/url]
[url=https://liovebpo.ga/post/L-Tat-D-Esprit-De-Soutien-Scolaire]L Tat D Esprit De Soutien Scolaire[/url]
[url=https://gobbgeldgerolvi.tk/post/Dicas-De-Instagram-Para-Deus-E-Universo… De Instagram Para Deus E Universo[/url]

[url=https://videoflix.cactusthemes.com/elektronomia-fire/#comment-1741530]at this website[/url]
[url=https://asianewsnetwork.net/lawda-demolishes-several-illegal-constructi… del nuovo piacere di apple[/url]
[url=https://www.zimbrafr.org/forum/topic/99121-valodi-penzes-casino-kisvard… problema platonico de montaigne quotes[/url]
[url=https://www.aafrc.org/best-dog-halloween-costumes/#comment-295942]4 trucchi per trovare le tue passioni[/url]
[url=http://refugioromelia.com/2016/09/2449/#comment-150836]here[/url]
[url=https://webdevsupply.com/10-bad-tips-for-a-creative-worker/#comment-121… tips to write a character analysis essay[/url]
[url=https://webdevsupply.com/a-very-simple-color-matching-algorithm-that-wo… racconto la mia tesi di inglese 22[/url]
[url=https://glavsantex.ru/blog/fitingi-dlya-trub/#comment1]Interessante ponto de fotografia usando rebatedor[/url]
[url=https://www.burtonquinnscott.com/obituaries/obituary/james-mosco-jr/con… fur ihren uberzeugenden auftritt[/url]
[url=https://www.funerariagandra.com/falecido/JOSE-ALMEIDA-DAS-NEVES/945#men… affirmationen fur einen besseren schreibstil[/url]
[url=https://videoflix.cactusthemes.com/bbc-news-review-british-airways-emba…]
[url=https://oilhaianh.com/9-cach-phan-biet-tinh-dau-va-huong-lieu-chuan/?co…: Re:[/url]
[url=https://bfoodfree.kailaasa.org/nirahara-samyama/meet-nithyananda-niraha…]
[url=https://rippleeffectfitness.com/one-hour-workout/#comment-18514]here[/u…]
3733e9f

lzkgh665 (not verified)

Tue, 09/13/2022 - 11:18

txobf963 (not verified)

Tue, 09/13/2022 - 11:19

Marinaeri (not verified)

Tue, 09/13/2022 - 11:19

Здравствуйте товарищи!
Предлагаем Вашему вниманию сервис оргтехники и продажу расходников для дома и офиса.Наша организация «КОПИМЕДИАГРУПП» работает 10 лет на рынке этой продукции в Беларуси.В сервисном центре клиенты могут заправить картридж сертифицированным совместимым тонером. Мастера проводят перезаправку картриджей лазерных устройств и струйных со встроенной СНПЧ. В случае необходимости можно сделать перепрошивку или замену чипа, благодаря которым пользователи смогут перезаправлять новые чернила практически неограниченное количество раз.Заправка картриджей для принтера обязательно включает проверку состояния комплектующих, в числе которых фотобарабан, вал первичного заряда, ракель, магнитный вал и другие запчасти. При необходимости неисправные или изношенные детали заменяются на новые. На замену стандартным – специалисты могут установить перезаправляемые картриджи.В список предоставляемых услуг входит ремонт и восстановление техники:лазерных и струйных принтеров;МФУ;копировальных аппаратов;факсов;плоттеров.Высокая квалификация специалистов и наличие профильного инструмента позволяют проводить точную диагностику и устранять неисправности абсолютно любого характера.Для устройств Samsung и Xerox проводится перепрошивка. Установка нового программного обеспечения снимает блокировку на заправку оригинальных и установку совместимых картриджей.Как заказать заправку картриджей
http://www.spearboard.com/member.php?u=737407
http://spotlight.radiantwaltz.net/forums/viewtopic.php?f=12&t=131094
https://www.sega-16.com/forum/member.php?730325-Marinavnc
http://galeevmm.ru/forum/memberlist.php?mode=viewprofile&u=384171
http://himeuta.org/member.php?1482009-Marinamyn

zyain87 (not verified)

Tue, 09/13/2022 - 11:21

Add new comment

Plain text

  • No HTML tags allowed.
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.