# CS3 - Need pageflip assistance with adding additional pages!

**URL:** <https://forum.kirupa.com/t/cs3-need-pageflip-assistance-with-adding-additional-pages/275530>\
**Category:** Uncategorized\
**Created:** [November 15, 2008, 12:31am UTC](https://forum.kirupa.com/t/cs3-need-pageflip-assistance-with-adding-additional-pages/275530 "2008-11-15T00:31:57Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![ImpulseTech08](https://avatars.discourse-cdn.com/v4/letter/i/f04885/32.png) [@ImpulseTech08](https://forum.kirupa.com/u/ImpulseTech08)\
**Post date:** [November 15, 2008, 12:31am UTC](https://forum.kirupa.com/t/cs3-need-pageflip-assistance-with-adding-additional-pages/275530/1 "2008-11-15T00:31:57Z")

</div>

I’m running in to a problem where I’ve added additional pages (20+ pages in total) and everything after page 16 is transparent. I know I have to have missed something simple. Can anyone help???

//pageflip version 2.02 (200405031400)  
//  
//(for the latest version, always check at [http://www.iparigrafika.hu/pageflip](http://www.iparigrafika.hu/pageflip))  
//  
//this code is written by Macc 2004.05.03  
[//abel@iparigrafika.hu](https://abel@iparigrafika.hu)  
//  
//this code is opensource  
//  
//free use!  
//but a small credit would be nice:)

trace(this);  
trace(\_root);

//these values can be changed: -------------------------------------------------------------------------

pw = 325; //page width in pixel  
ph = 489; //page height in pixel

//page data… (export names/tearing flag)  
pageOrder = new Array(“page0”,“page1”,“page2”,“page3”,“page4”,“page5”,“page6”,“page7”,“page8”,“page9”,“page10”,“page11”,“page12”,“page13”,“page14”,“page15”,“page16”,“page17”,“page18”,“page19”,“page20”,“page21”,“page22”,“page23”,“page24”,“page25”,“page26”,“page27”);  
pageCanTear = new Array(false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false); //pages TEAROFF function!

page=0; //first page (normally it is 0 = the page before the cover = blank page)  
maxpage=26; //last page (back cover, should be even number)

hcover = false; //hard cover on/off

clickarea = 50; //pixel width of the click sensitive area at the edges…  
afa = 56; //width of the autoflip starter square.

gs = 2.5; //goto page flip speed  
ps = 3; //mouse pursuit speed  
es = 2; //flip speed after mouse btn release

canflip = true; //page flipping enabled

//do not change these values: ---------------------------------------------------------------------------------------------------------------------

\_global.mcnt = 0; //counter (used on a page where is an animation)  
gpage = 0; //gotoPage No  
gflip = false; //gotoPage flip  
gdir = 0; //goto direction…

aflip = false; //auto flip  
flip = false; //pageflip  
flipOff = false; //terminateflip  
flipOK = false; //good flip  
hflip = false; //hardflip (the cover of the book)  
rotz = -30; //hardflip max y difference

preflip = false; //corner flip status  
ctear = false; //actual page status  
tear = false;  
teard = 0;  
tlimit = 80;  
removedPages = new Array(); //list of removed pages!

mpx = 0, mpy = 0; //mousepos at click

sx = sy = 0; //startpoint when flipping

x = 0; //mouse x,y  
y = 0;  
ax = 0; //auto x,y  
ay = 0;  
acnt = 0;  
aadd = 0;  
aamp = 0;

AM = Math.PI/180;

stop();

\_quality = “BEST”;  
Stage.scaleMode = “noScale”;

function reset() { //initializing pages… ---------------------------------------------------------------------------------------  
pages.p0.page.\_x = -pw;  
pages.p0.\_x = 0;  
pages.p1.page.\_x = -pw;  
pages.p1.\_x = 0;

```
pages.flip.p2.page._x = -pw;
pages.flip.p2._x = pw;
pages.flip.p3.page._x = -pw;
pages.flip.p3._x = 0;

pages.p4.page._x = -pw;
pages.p4._x = pw;
pages.p5.page._x = -pw;
pages.p5._x = pw;

pages.pgrad._visible = pages.mask._visible = pages.flip._visible = false;
pages.flip.p3mask._width = pages.pgmask._width = pw*2;
pages.center._height = pages.flip.p3mask._height = pages.pgmask._height = ph;
pages.flip.fmask.page.pf._width = pw;
pages.center._width = 1;
pages.flip.fmask.page.pf._height = ph;

pageNumber = new Array();
for(i=0;i&lt;=(maxPage+1);i++) pageNumber* = i;

```

}

mousecontroll = new Object(); //initializing mouse click handler ---------------------------------------------------------------------------  
mousecontroll.onMouseDown = function() {  
if(flip && !aflip) {// && !preflip) {  
flipOK = false;  
if(sx\<0 && pages.\_xmouse\>0) flipOK = true;  
if(sx\>0 && pages.\_xmouse\<0) flipOK = true;  
flipOff = true;  
flip = false;  
} else if((flipoff || aflip || !canflip) && !preflip) {  
trace(“donothing”);  
} else {  
var oox = ox;  
var ooy = oy;  
var osx = sx;  
var osy = sy;  
var hit = hittest(); //hittest  
if(hit) {  
anim.\_visible = false;  
flip = true;  
flipOff = false;  
tear = false; //not tearing yet…  
ox = sx = hit\*pw;  
if(preflip) {  
aflip = preflip = false;  
ox = oox, oy = ooy;  
sx = osx, sy = osy;  
}  
pages.flip.setMask(pages.mask);  
mpx = pages.\_xmouse, mpy = pages.\_ymouse;  
//\_quality = “MEDIUM”; //it is the place to degrade image quality while turning pages if the performance is too low.  
}  
}  
}  
mousecontroll.onMouseUp = function() {  
if(flip && !tear) {  
if((Math.abs(pages.\_xmouse)\>(pw-afa) && Math.abs(pages.\_ymouse)\>(ph/2-afa) && Math.abs(pages.\_xmouse-mpx)\<afa) || preflip) {  
flip = false;  
preflip = false;  
autoflip();  
} else if(!preflip) {  
preflip = false;  
flipOK = false;  
if(sx\<0 && pages.\_xmouse\>0) flipOK = true;  
if(sx\>0 && pages.\_xmouse\<0) flipOK = true;  
flipOff = true;  
flip = false;  
}  
}  
}

function hittest() { //hittest at mouse clicks, if click is over the book -\> determining turning direction ------------------------------------  
var x=pages.\_xmouse;  
var y=pages.\_ymouse;  
var pmh = ph/2;

```
if(y&lt;=pmh && y&gt;=-pmh && x&lt;=pw && x&gt;=-pw) { //ha a megadott intervallumban klikkelunk, akkor lapozhatunk
    var r = Math.sqrt(x*x+y*y);
    var a = Math.asin(y/r);
    var y = Math.tan(a)*pw;
    if(y&gt;0 && y&gt;ph/2) y = ph/2;
    if(y&lt;0 && y&lt;-ph/2) y = - ph/2;
    oy = sy = y;
    r0 = Math.sqrt((sy+ph/2)*(sy+ph/2)+pw*pw);
    r1 = Math.sqrt((ph/2-sy)*(ph/2-sy)+pw*pw);
    
    pageN = eval("pages.flip.p2.page");
    pageO = eval("pages.flip.p3");
    offs = -pw;
    pages.flip.fmask._x = pw;
    
    if(x&lt;-(pw-clickarea) && page&gt;0) { //&gt;-----&gt; flip backward
        pages.flip.p3._x = 0;
        hflip = checkCover(page,-1);
        setPages(page-2,page-1,page,page+1);
        ctear = pageCanTear[page-1];
        return -1;
    }
    if(x&gt;(pw-clickarea) && page&lt;maxpage) { //&lt;-----&lt; flip forward
        pages.flip.p3._x = pw;
        hflip = checkCover(page,1);
        setPages(page,page+2,page+1,page+3);
        ctear = pageCanTear[page+2];
        return 1;
    }
} else return 0; //wrong click

```

}  
function checkCover(p,dir) {  
if(hcover) {  
if(dir\>0) {  
if(p==(maxpage-2) || p==0) return true;  
} else {  
if(p==maxpage || p==2) return true;  
}  
}  
return false;  
}  
function corner() {  
var x = Math.abs(pages.\_xmouse);  
var y = Math.abs(pages.\_ymouse);  
if(x\>(pw-afa) && x\<pw && y\>(ph/2-afa) && y\<(ph/2)) {  
return true;  
}  
return false;  
}

function oef() {  
\_global.mcnt++; //main counter incrase (need for some page effect);

```
if(!flip && corner()) { //corner mouseover
    preflip = true;
    if(!autoflip()) preflip = false;
}
if(preflip && !corner()) {
    preflip = false;
    flip = false;
    flipOK = false;
    flipoff = true;
}
getm();
if(aflip && !preflip) {
    y = (ay += (sy-ay)/(gflip? gs: ps ));
    acnt += aadd;
    ax -= aadd;
    if(Math.abs(acnt)&gt;pw) {
        flipOK = true;
        flipOff = true;
        flip = false;
        aflip = false;
    }
}
if(flip) { //page turning is in progress...
    if(tear) {
        x = tox;
        y = (toy += teard);
        teard *= 1.2;
        if(Math.abs(teard)&gt;1200) {
            flipOff = true;
            flip = false;
        }
    } else {
        x = (ox += (x-ox)/(gflip? gs: ps ));
        y = (oy += (y-oy)/(gflip? gs: ps ));
    }
    calc(x,y); //positioning pages and shadows
}
if(flipOff) { //terminating page turning effect... (comlplete turning... dropped on the other side)
    if(flipOK || tear) {
        x = (ox += (-sx-ox)/(gflip? gs: es ));
        y = (oy += (sy-oy)/(gflip? gs: es ));
        calc(x,y);
        if(x/-sx &gt; 0.99 || tear) { //we are done with turning, so stop all turning issue...
            flip = false;
            flipOK = flipOff = false;
            pages.pgrad._visible = pages.flip._visible = false;
            //_quality = "BEST"; //if quality is decrased during turning effect, you must reset its default value!

            if(tear) { //if tear: remove page!!!
                removePage((sx&lt;0)? page: page+1);
                //removePage(page);
                page += (sx&lt;0)? -2: 0;
            } else {
                page += (sx&lt;0)? -2: 2; //and tourning pages at pagenumber level...
            }
            setPages(page,0,0,page+1);
            tear = false;
            
            if(gpage&gt;0) { //gotoflip active -&gt; is there another flipping left?
                gpage--;
                autoflip();
            } else gflip = false;
        }
    } else { //terminating page turning effect... (incomlplete turning... dropped on the dragged side)
        x = (ox += (sx-ox)/3);
        y = (oy += (sy-oy)/3);
        calc(x,y);
        if(x/sx &gt; 0.99) { //we are done with turning, so stop all turning issue...
            flip = false;
            flipOff = false;
            aflip = false;
            pages.pgrad._visible = pages.flip._visible = false;
            //_quality = "HIGH"; //if quality is decrased during turning effect, you must reset its default value!
            setPages(page,0,0,page+1); //no change at pagenumbers..
        }
    }
}

```

}

function calc(x,y) { //positioning pages and shadows by x,y reference points --------------------------------------------------  
if(hflip) { //hardflip…  
var xp = (sx\<0)? -x: x;  
if(xp\>0) {  
sp2.\_visible = false;  
sp3.\_visible = true;  
scalc(sp3,x);  
} else {  
sp3.\_visible = false;  
sp2.\_visible = true;  
scalc(sp2,x);  
}  
pages.flip.setMask(null);  
pages.flip.\_visible = true;  
pages.flip.fgrad.\_visible = false;  
pages.flip.p2.\_visible = pages.flip.p3.\_visible = false;  
return;  
} else pages.flip.fgrad.\_visible = true;

```
//normal flipping process---------------------------------------------------------------------
var rr0 = Math.sqrt((y+ph/2)*(y+ph/2)+x*x);
var rr1 = Math.sqrt((ph/2-y)*(ph/2-y)+x*x);
if((rr0&gt;r0 || rr1&gt;r1) && !tear) { // we can tear off pages now:)
                        // so reference points must be recalculated!
    if(y&lt;sy) { // k1-gyel kell osszehasonlitani!
        var a = Math.asin((ph/2-y)/rr1);
        y = (ph/2-Math.sin(a)*r1);
        x = (x&lt;0)? -Math.cos(a)*r1: Math.cos(a)*r1;
        if(y&gt;sy) {
            if((sx*x)&gt;0) y = sy, x = sx;
            else y = sy, x = -sx;
        }
        if((rr1-r1)&gt;tlimit && ctear) {
            teard = -5;
            tear = true;
            tox = ox = x;
            toy = oy = y;
        }
    } else { // k0-val kell osszehasonlitani!
        var a = Math.asin((y+ph/2)/rr0);
        y = Math.sin(a)*r0-ph/2;
        x = (x&lt;0)? -Math.cos(a)*r0: Math.cos(a)*r0;
        if(y&lt;sy) {
            if((sx*x)&gt;0) y = sy, x = sx;
            else y = sy, x = -sx;
        }
        if((rr0-r0)&gt;tlimit && ctear) {
            teard = 5;
            tear = true;
            tox = ox = x;
            toy = oy = y;
        }
    }
}
if((sx&lt;0 && (x-sx)&lt;10) || (sx&gt;0 && (sx-x)&lt;10)) {
    if(sx&lt;0) x = -pw+10;
    if(sx&gt;0) x = pw-10;
} 
//calculating flipping process
pages.flip._visible = true;
pages.flip.p3shadow._visible = pages.pgrad._visible = !tear;
pages.flip.p2._visible = pages.flip.p3._visible = true;
//equation of the line
var vx = x-sx;
var vy = y-sy;
var a1 = vy/vx;
var a2 = -vy/vx;

cx = sx+(vx/2);
cy = sy+(vy/2);
//trigonometriai szamitasok
//calculating rotation of the page, and the masks
var r = Math.sqrt((sx-x)*(sx-x)+(sy-y)*(sy-y));
var a = Math.asin((sy-y)/r);
if(sx&lt;0) a = -a;    
ad = a/AM; //in degree
pageN._rotation = ad*2;
r = Math.sqrt((sx-x)*(sx-x)+(sy-y)*(sy-y));
rl = (pw*2);
if(sx&gt;0) { //flip forward
    pages.mask._xscale = 100;
    nx = cx-Math.tan(a)*(ph/2-cy);
    ny = ph/2;
    if(nx&gt;pw) {
        nx = pw;
        ny = cy+Math.tan(Math.PI/2+a)*(pw-cx);
    }
    pageN.pf._x = -(pw-nx);
    pages.flip.fgrad._xscale = (r/rl/2)*pw;
    pages.pgrad._xscale = -(r/rl/2)*pw;
    pages.flip.p3shadow._xscale = (r/rl/2)*pw;
} else { //flip backward
    pages.mask._xscale = -100;
    nx = cx-Math.tan(a)*(ph/2-cy);
    ny = ph/2;
    if(nx&lt;-pw) {
        nx = -pw;
        ny = cy+Math.tan(Math.PI/2+a)*(-pw-cx);
    }
    pageN.pf._x = -(pw-(pw+nx));
    pages.flip.fgrad._xscale = -(r/rl/2)*pw;
    pages.pgrad._xscale = (r/rl/2)*pw;
    pages.flip.p3shadow._xscale = -(r/rl/2)*pw;
}
pages.mask._x = cx;
pages.mask._y = cy;
pages.mask._rotation = ad;
pageN.pf._y = -ny;
pageN._x = nx+offs;
pageN._y = ny;
pages.flip.fgrad._x = cx;
pages.flip.fgrad._y = cy;
pages.flip.fgrad._rotation = ad;
pages.flip.fgrad._alpha = (r&gt;(rl-50))? 100-(r-(rl-50))*2: 100;
pages.flip.p3shadow._x = cx;
pages.flip.p3shadow._y = cy;
pages.flip.p3shadow._rotation = ad;
pages.flip.p3shadow._alpha = (r&gt;(rl-50))? 100-(r-(rl-50))*2: 100;
pages.pgrad._x = cx;
pages.pgrad._y = cy;
pages.pgrad._rotation = ad+180;
pages.pgrad._alpha = (r&gt;(rl-100))? 100-(r-(rl-100)): 100;
pages.flip.fmask.page._x = pageN._x;
pages.flip.fmask.page._y = pageN._y;
pages.flip.fmask.page.pf._x = pageN.pf._x;
pages.flip.fmask.page.pf._y = pageN.pf._y;
pages.flip.fmask.page._rotation = pageN._rotation;

```

}

function scalc(obj,x) { //hardflip calc  
if(x\<-pw) x=-pw;  
if(x\>pw) x=pw;  
var a = Math.asin( x/pw );  
var rot = a/AM/2;  
var xs = 100;  
var ss = 100_Math.sin( rotz_AM );  
x = x/2;  
var y = Math.cos(a)_(pw/2)_(ss/100);  
placeImg(obj, rot, ss, x, y)  
pages.pgrad.\_visible = pages.flip.\_visible = true;  
pages.pgrad.\_xscale = x;  
pages.pgrad.\_alpha = pages.flip.p3shadow.\_alpha = 100;  
pages.flip.p3shadow.\_xscale = -x;  
pages.flip.p3shadow.\_x = 0;  
pages.flip.p3shadow.\_y = 0;  
pages.flip.p3shadow.\_rotation = 0;  
pages.pgrad.\_x = 0;  
pages.pgrad.\_y = 0;  
pages.pgrad.\_rotation = 0;  
}

function placeImg(j, rot, ss, x, y) {  
var m = Math.tan( rot_AM );  
var f = Math.SQRT2/Math.sqrt(m_m+1);  
var phxs = 100_m;  
var phRot = -rot;;  
var xs = 100_f;  
var ys = 100_f;  
j.ph.pic.\_rotation = 45;  
j.ph.pic.\_xscale = (phxs\<0)? - xs: xs;  
j.ph.pic.\_yscale = ys_(100/ss);  
j.ph.\_rotation = phRot;  
j.ph.\_xscale = phxs;  
j.\_yscale = ss;  
j.\_x = x;  
j.\_y = y;  
j.\_visible = true;  
}

function setPages(p1,p2,p3,p4) { //attach the right page “image” at the right place:)  
p0 = p1-2; //pages for transparency…  
p5 = p4+2;  
if(p0\<0) p0=0;  
if(p5\>maxpage) p5=0;

```
if(p1&lt;0) p1=0; //visible pages
if(p2&lt;0) p2=0;
if(p3&lt;0) p3=0;
if(p4&lt;0) p4=0;
trace("setpages -&gt;"+p1+","+p2+","+p3+","+p4);
pleft = pages.p1.page.pf.ph.attachMovie(pageOrder[p1],"pic",0);
pages.p1.page.pf.ph._y = -ph/2;
pleftb = pages.p0.page.pf.ph.attachMovie(pageOrder[p0],"pic",0);
pages.p0.page.pf.ph._y = -ph/2;
if(hflip) { //hardflip pages are specials!!! 
    var tm = pages.flip.hfliph.attachMovie("sph","sp2",0);
    sp2 = tm.ph.pic.attachMovie(pageOrder[p2],"pic",0);
    sp2._y = -ph/2, sp2._x = -pw/2;
    sp2 = eval("pages.flip.hfliph.sp2");
    var tm = pages.flip.hfliph.attachMovie("sph","sp3",1);
    sp3 = tm.ph.pic.attachMovie(pageOrder[p3],"pic",0);
    sp3._y = -ph/2, sp3._x = -pw/2;
    sp3 = eval("pages.flip.hfliph.sp3");
} else {
    pages.flip.hfliph.sp2.removeMovieClip();
    pages.flip.hfliph.sp3.removeMovieClip();
    sp2 = pages.flip.p2.page.pf.ph.attachMovie(pageOrder[p2],"pic",0);
    pages.flip.p2.page.pf.ph._y = -ph/2;
    sp3 = pages.flip.p3.page.pf.ph.attachMovie(pageOrder[p3],"pic",0);
    pages.flip.p3.page.pf.ph._y = -ph/2;
}
pright = pages.p4.page.pf.ph.attachMovie(pageOrder[p4],"pic",0);
pages.p4.page.pf.ph._y = -ph/2;
prightb = pages.p5.page.pf.ph.attachMovie(pageOrder[p5],"pic",0);
pages.p5.page.pf.ph._y = -ph/2;

```

}

function resetPages() {  
setPages(page,0,0,page+1);  
}

function autoflip() { //start auto flip!  
if(!aflip && !flip && !flipoff && canflip) { //only when all conditions fits our needs…  
acnt = 0  
aamp = Math.random()_(ph/2)-(ph/4);  
var x= gflip? (gdir_pw)/2: ((pages.\_xmouse\<0)? -pw/2: pw/2);  
var y= Math.random()_ph-(ph/2); //random starty  
var pmh = ph/2;  
var r = Math.sqrt(x_x+y_y);  
var a = Math.asin(y/r);  
var yy = Math.tan(a)pw;  
if(y\>0 && y\>ph/2) y = ph/2;  
if(y\<0 && y\<-ph/2) y = - ph/2;  
oy = sy = yy;  
ax = (pages.\_xmouse\<0)? -pw/2: pw/2;  
var l = ((ph/2)-y);  
ay = y;+(Math.random()2l)-l; //page turnig style randomizing  
offs = -pw;  
var hit = 0;  
if(x\<0 && page\>0) {  
pages.flip.p3.\_x = 0;  
hflip = checkCover(page,-1);  
if(!(preflip && hflip)) setPages(page-2,page-1,page,page+1);  
hit = -1;  
}  
if(x\>0 && page\<maxpage) {  
pages.flip.p3.\_x = pw;  
hflip = checkCover(page,1);  
if(!(preflip && hflip)) setPages(page,page+2,page+1,page+3);  
hit = 1;  
}  
if(hflip && preflip) {  
hit = 0;  
preflip = false;  
return false;  
}  
if(hit) {  
anim.\_visible = false;  
flip = true;  
flipOff = false;  
ox = sx = hitpw;  
pages.flip.setMask(pages.mask);  
aadd = hit_(pw/(gflip? 5:10 )); //autoflip takes 10 frames to be done!!!  
aflip = true;  
pages.flip.fmask.\_x = pw;  
if(preflip) {  
oy = sy = (pages.\_ymouse\<0)? -(ph/2): (ph/2);  
}  
r0 = Math.sqrt((sy+ph/2)_(sy+ph/2)+pw_pw);  
r1 = Math.sqrt((ph/2-sy)_(ph/2-sy)+pw_pw);  
pageN = eval(“pages.flip.p2.page”);  
pageO = eval(“pages.flip.p3”);  
oef();  
return true;  
}  
} else return false;  
}

function getm() { //get x,y reference points depending of turning style: manual/auto  
if(aflip && !preflip) {  
x = ax;  
y = ay;  
} else {  
x = pages.\_xmouse;  
y = pages.\_ymouse;  
}  
}

function gotoPage(i) { //quickjump to the page number i  
i = getPN(i);  
if(i\<0) return false;  
var p = int(page/2);  
var d = int(i/2);  
if(p!=d && canflip && !gflip) { //target!=current page  
if(p\<d) { //go forward  
gdir = 1;  
gpage = d-p-1;  
} else { //go backward  
gdir = -1  
gpage = p-d-1;  
}  
gflip = true;  
autoflip();  
}  
}  
function getPN(i) { //get the right page number  
var find = false;  
for(j=1;j\<=maxpage;j++) {  
if(i==pageNumber[j]) {  
i=j;  
find = true;  
break;  
}  
}  
if(find) return i;  
else return -1;  
}  
function removePage(i) {  
trace("remove page "+i);  
i = (Math.floor((i-1)/2)_2)+1;  
removedPages.push(pageNumber_, pageNumber[i+1]);

```
for(j=(i+2);j&lt;=(maxPage+1);j++) {
    pageOrder[j-2]=pageOrder[j];
    pageCanTear[j-2]=pageCanTear[j];
    pageNumber[j-2]=pageNumber[j];
}
trace("removed pages "+i+","+(i+1));
trace(removedPages.join(", "));
maxPage -= 2;

```

}  
onEnterFrame = function() {  
trace(getBytesLoaded());  
if(getBytesLoaded()==getBytesTotal()) {  
gotoAndPlay(2);  
delete onEnterFrame;  
}  
}

//------------------------------------------------------------------------------------------------ PUT YOUR CODE HERE --------------

/\* you can use these functions:

```
    gotoPage( destinationPageNo ); //quick jump to the page number: destinationPageNo; values = 0-maxpages;
    autoflip(); //start autoflip (direction is calculated from _xmouse)

    canflip //it's a variable. setting its value to false disables flipping

    other functions of page turning is automatic;

```

\*/
