沿海制置司水军也有不少精明强悍的将领,他们预判一旦发动战事,流求必然会召回济州岛和星岛的舰队。故在兵力布置上,他们将主力精锐投在了台北和台南两个方面,分别有一千和八百艘战船。至于台中,只需要围困住台中堡的守军,在附近开辟新的登陆场。大军上岸之后,再远远绕开坚固堡垒攻打往内陆的屯垦点,用以战养战的方式逐步向台北挺进。只要拿下台北这个政治经济中心,被包围的台南和台中,便会不战而降。
这个战术虽然中规中距,却也十分有效。即便拥有最多防御火炮的台北也不可能挡住上千艘战船。一旦被攻陷港口,台北必然陷入战火之中,这是霹雳军万万不愿意看到的。故当得知沿海制置司战船出港的消息后,张宣也率了舰队朝台北急驰。凭着船快的优势,霹雳军战舰提前到了台北。他并没有下令全体进港,而是只派了一半战船进港防守,自己则率另一半战船在外海,伺机而动。
进攻台北的宋军,见到港口和外海上的几十艘大型战舰,直接就傻眼了,情报不是说流求的舰队都在外地吗?只不过既然来到来了,岂可无功而返。他们还是仗着船多,硬着头皮攻了上来。只不过,在港口要塞火炮和战舰火力的阻击下,数波次的冲击都被击退。外海的霹雳军战舰也仗着船快,不断地用回旋战术炮击,像剥洋葱一样,不断击毁击伤外围的宋军战船。星岛战役之后,借鉴了大食战船的技术,霹雳军对战舰进行了改装,大大提高了适航性、操纵性和船速。
台北的战事迅速陷入了僵持之中。宋军的战船虽多,一时间却攻不进港口,几十艘战舰和要塞炮组成的火力网实在太强了。宋军又追不上外海的霹雳军战舰,只能被其放风筝。宋军的大型战船不多,且多为弩炮战船,火炮战船很少,在远距离上对霹雳军战船没有多大的威胁。真正对霹雳军战船构成威胁的,反而是火战船和爆破船,它们虽小却轻快且数量众多,一旦被贴身,便是灭顶之灾。在高丽海岸吃过火战船大亏的张宣,只得指挥战舰远远炮击宋军战船,只要双方距离稍有靠近,便会迅速地撤退。
随着时间的推移,情况对宋军越来越不利,军心也越来越浮动。毕竟霹雳军消耗的只是弹药,而宋军消耗的可是人命与船只。随着战事的进行,宋军将领发现每晚之后已方的船只总会少一些。自抵达台北海域之日起,不少船只便趁着夜色偷偷叛逃到霹雳军一方。这些年来,霹雳军的舰队急速膨胀,其中不少水手甚至基层军官便来自沿海制置司。眼下对阵的双方,不少人都是昔日的同袍。在重文轻武的环境中,宋军士兵地位十分低下,与霹雳军士兵待遇根本不可同日而语。之前要驾船逃到流求根本不可能,如今流求近在眼前,那里肯放弃机会。
宋军指挥官原本想分兵,一部分攻击港口,主力则寻机会解决了霹雳军舰队,再来攻打台北。只不过到达台北海域不到十日,便叛逃了几十艘战船,且情况有愈演愈烈的趋势。本着“无过便是功”的思维,他当机立断决定退兵。如果将大部分战船带回去只是小罪,不会祸及家人。如果战损和叛逃太多,不仅自己性命难保,家人也会受到牵连。至于败退的理由则很充分——霹雳军战舰主力已经回来了。
为了防止霹雳军战舰追击,宋军指挥官又留了与其素来有隙的将领下来,让其领了一百艘战船断后。谁都知道,留下来断后跑又跑不过,打又打不赢。如果战死和被俘倒好,如果负伤了下场则更悲惨,余生都将在痛苦中度过。如此明显的公报私仇,在断后的宋军士兵中霎间炸了锅。待主力一退去,断后的那些宋军便派人与霹雳军联系投降事宜。半日之后,这些投降的战船便在引导下,徐徐开进了台北港。